recyclerview 多item方法
1.思路
显示多item,可以在adapter中对传入的值进行判断,然后根据不同的值绑定不同item的xml,再对其进行操作。比如你传入的数据中两个item要显示的内容不一样,那你可以判断某一个特殊的值是否为空,然后绑定不同的item。
2.举例
1.在getItemViewType判断传入的值
@Override
public int getItemViewType(int i) {
if (comments.get(i).getNumber()!=null) {
return ITEM_NUMBER;
} else if (comments.get(i).getNumber()==null ) {
return ITEM_COMMENTS;
}
return super.getItemViewType(i);
}
comments是传入的List<comments>
Comments是一个全局变量
comments.get(i).getNumber()是获取到了某个值
ITEM_COMMENTS 和ITEM_NUMBER是定义的两个标记。
2.绑定不同item
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view=null;
RecyclerView.ViewHolder holder=null;
if (i==ITEM_COMMENTS){
view= LayoutInflater.from(context).inflate(R.layout.item_comment,viewGroup,false);
holder=new ViewHolderComments(view);}
else if (i==ITEM_NUMBER){
view= LayoutInflater.from(context).inflate(R.layout.item_comment_number,viewGroup,false);
holder=new ViewHolderNumber(view);}
assert holder != null;
return holder;
}
这里分别绑定了item_comment_number和item_comment
3用不同的view holder绑定item里的控件
public static class ViewHolderComments extends RecyclerView.ViewHolder {
·········
//这里有点多就不贴上了
public ViewHolderComments(@NonNull View itemView) {
super(itemView);
········
}
}
public static class ViewHolderNumber extends RecyclerView.ViewHolder {
TextView number;
public ViewHolderNumber(@NonNull View itemView) {
super(itemView);
number=itemView.findViewById(R.id.comment_number);
}
}
4。进行操作
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int i) {
if (holder instanceof ViewHolderComments){
Glide.with(context).load(Objects.requireNonNull(comments.get(i).getAvatar())).into(((ViewHolderComments)holder).image); ((ViewHolderComments)holder).date.setText(comments.get(i).getTime() +"");
//点赞按钮
final boolean[] flag = {
true};
((ViewHolderComments)holder).like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (flag[0]){
flag[0] =false;
((ViewHolderComments)holder).number.setText(comments.get(i).getLikes()+1 +"");
((ViewHolderComments)holder).like.setBackgroundResource(R.drawable.good_t);
}
else {
flag[0] =true;
((ViewHolderComments)holder).number.setText(comments.get(i).getLikes()+"");
((ViewHolderComments)holder).like.setBackgroundResource(R.drawable.good_f);}
}
});}
else if (holder instanceof ViewHolderNumber){
((ViewHolderNumber)holder).number.setText(Objects.requireNonNull(comments.get(i).getNumber()));
}
}
来源:oschina
链接:https://my.oschina.net/u/4267017/blog/4758795