android 查看全部效果,Android recyclerview实现查看更多/收起功能

本文展示了如何在Android中使用RecyclerView实现查看全部和收起的效果。通过自定义Adapter,添加不同类型的条目(正常、查看更多、收起),并设置点击事件来切换显示状态。

效果图如下(没搞GIF转换工具,只能截图了。。。):

98a2e8b0bf528fb1855efe5316a0a6cd.png

b41b1a188a8a175f4ee449f4cf1287df.png

310178520d7dc395eb8d66b5e228ea31.png

布局文件activity_main.xml,就一个recyclerview:

代码MainActivity:

package seemore.test.com.seemorerecycleview;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.GridLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.widget.Toast;

import java.util.ArrayList;

import java.util.List;

public class MainActivity extends AppCompatActivity {

private RecyclerView recyclerView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

}

private void initView() {

recyclerView = (RecyclerView) findViewById(R.id.rv_main);

Listlist = new ArrayList<>();

for (int i = 0; i < 30; i++) {

list.add("哈萨ki" + i);

}

SeeMoreAdapter seeMoreAdapter = new SeeMoreAdapter(list);

recyclerView.setLayoutManager(new GridLayoutManager(this, 4));

recyclerView.setAdapter(seeMoreAdapter);

seeMoreAdapter.setOnITEMClickListener(new SeeMoreAdapter.OnItemClick() {

@Override

public void onItemClick(int position) {

int mPosition = position + 1;

Toast.makeText(getBaseContext(),"点击了第"+ mPosition +"个哈萨ki",Toast.LENGTH_SHORT).show();

}

});

}

}

布局文件item_view:

代码SeeMoreAdapter:

package seemore.test.com.seemorerecycleview;

import android.support.annotation.NonNull;

import android.support.v7.widget.RecyclerView;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import java.util.List;

class SeeMoreAdapter extends RecyclerView.Adapter{

private final static int TYPE_NORMAL = 0;//正常条目

private final static int TYPE_SEE_MORE = 1;//查看更多

private final static int TYPE_HIDE = 2;//收起

private ListmList;

private boolean mOpen = false;//是否是展开状态

SeeMoreAdapter(ListmList) {

this.mList = mList;

}

@NonNull

@Override

public SeeMoreViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_view, viewGroup, false);

return new SeeMoreViewHolder(view);

}

@Override

public void onBindViewHolder(@NonNull SeeMoreViewHolder seeMoreViewHolder, final int position) {

// TextView textView = (TextView) seeMoreViewHolder.textView;

if (getItemViewType(position) == TYPE_HIDE) {

seeMoreViewHolder.textView.setText("收起");

seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mOpen = false;

notifyDataSetChanged();

}

});

} else if (getItemViewType(position) == TYPE_SEE_MORE) {

seeMoreViewHolder.textView.setText("查看更多");

seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

mOpen = true;

notifyDataSetChanged();

}

});

} else {

seeMoreViewHolder.textView.setText(mList.get(position));

seeMoreViewHolder.rl_item.setClickable(false);

if (onItemClick!=null){

seeMoreViewHolder.rl_item.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onItemClick.onItemClick(position);

}

});

}

}

}

@Override

public int getItemViewType(int position) {

if (mList.size() <= 4) {

return TYPE_NORMAL;

}

if (mOpen) {

if (position == mList.size()) {

return TYPE_HIDE;

} else {

return TYPE_NORMAL;

}

} else {

if (position == 3) {

return TYPE_SEE_MORE;

} else {

return TYPE_NORMAL;

}

}

}

@Override

public int getItemCount() {

if (mList == null || mList.size() == 0) {

return 0;

}

if (mList.size() > 4) {

//若现在是展开状态 条目数量需要+1 "收起"条目

if (mOpen) {

return mList.size() + 1;

} else {

return 4;

}

} else {

return mList.size();

}

}

class SeeMoreViewHolder extends RecyclerView.ViewHolder {

TextView textView ;

ImageView iv_item ;

RelativeLayout rl_item ;

public SeeMoreViewHolder(@NonNull View itemView) {

super(itemView);

textView = itemView.findViewById(R.id.itemView);

iv_item = itemView.findViewById(R.id.iv_item);

rl_item = itemView.findViewById(R.id.rl_item);

}

}

public interface OnItemClick{

void onItemClick(int position);

}

private OnItemClick onItemClick;

public void setOnITEMClickListener(OnItemClick onItemClick){

this.onItemClick = onItemClick;

}

}

代码链接:https://download.youkuaiyun.com/download/qq_38306233/12311257

c7a1c2aa494dddaad70a3e3a891226e4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值