安卓进阶Android技术知识Android开发

RecyclerView使用(二)

2016-12-13  本文已影响308人  辩护人

这次主要讲多种Item的使用,添加,删除

多种Item

我之前在网上见过一些其他的思路,觉得做得有些麻烦了。我的思路是通过在数据上增加一个属性Type,来通过它来判断不同的类型ViewHolder。

  1. 准备数据的改变
public class ChatEntity {
    private String content;//内容
    private int type;//类型
    //剩下的构造方法,get/set方法
}
//实例化一个ArrayList对象
ArrayList<ChatEntity> list = new ArrayList<>();
//实例化一个ChatEntity对象
ChatEntity entity1 = new ChatEntity("How are you ?",0);
ChatEntity entity2 = new ChatEntity("I'm fine.And you?",1);
ChatEntity entity3 = new ChatEntity("你好吗?",0);
ChatEntity entity4 = new ChatEntity("我很好,你呢?",1);
//添加数据
list.add(entity1);
list.add(entity2);
list.add(entity3);
list.add(entity4);
  1. 在适配器中
    继承时不用加泛型
list.add(entity4);public int getItemViewType(int position) {
    return list.get(position).getType();
}
public class SendViewHolder extends RecyclerView.ViewHolder{
    TextView tvSend;
    public SendViewHolder(View itemView) {
        super(itemView);
        //初始化控件
        tvSend = (TextView) itemView.findViewById(R.id.tv_send);
    }
}
public class ReceiveViewHolder extends RecyclerView.ViewHolder{
    TextView tvReceive;
    public ReceiveViewHolder(View itemView) {
        super(itemView);
        //初始化控件
        tvReceive = (TextView) itemView.findViewById(R.id.tv_receive);
    }
}
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //判断类型是0还是1
    if (viewType == 0){
        //获取一个View对象
        View sendView = LayoutInflater.from(context).inflate(R.layout.send_item,parent,false);
        //实例化一个发送的ViewHolder
        SendViewHolder sendViewHolder = new SendViewHolder(sendView);
        return sendViewHolder;
    }else {
        //获取一个View对象
        View receiveView = LayoutInflater.from(context).inflate(R.layout.receive_item,parent,false);
        //实例化一个接收的ViewHolder
        ReceiveViewHolder receiveViewHolder = new ReceiveViewHolder(receiveView);
        return receiveViewHolder;
    }
}
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    //判断类型值是0还是1
    if (getItemViewType(position)==0){
        //获取要显示的内容
        ChatEntity entity = list.get(position);
        String content = entity.getContent();
        //获取一个SendViewHolder对象
        SendViewHolder sendViewHolder = (SendViewHolder) holder;
        //给控件上显示内容
        sendViewHolder.tvSend.setText(content);        
    }else {
        //获取要显示的内容
        ChatEntity entity = list.get(position);
        String content = entity.getContent();
        //获取一个ReceiveViewHolder对象
        ReceiveViewHolder receiveViewHolder = (ReceiveViewHolder) holder;
        //给控件显示内容
        receiveViewHolder.tvReceive.setText(content);
    }
}

剩下的那么跟之前一样

添加

public void add(int position,String content){
    //往数据集合中添加数据
    list.add(position,content);
    //刷新无动画
    notifyDataSetChanged();
    //刷新有动画
    notifyItemInserted(position);
}

删除

public  void remove(int position){
    //判断List的大小是否小于要删除的位置
    if (list.size() < position + 1){
         return;
    }
    //数据集合中删除某个位置的数据
    list.remove(position);
    //刷新无动画
    //notifyDataSetChanged();
    //刷新有动画
    notifyItemRemoved(position);
}

注:

RecyclerView的系列的文章

上一篇 下一篇

猜你喜欢

热点阅读