Recyclerview单选和多选

Recyclerview单选和多选

在这里插入图片描述

思路
单选的时候:在adapter中声明一个变量lastClickPosition记住点击的是哪个位置的item,在getView()方法中,如果lastClickPosition =position,则imageVIew.setImageResource(R.drawable.icon)
多选的时候:建立一个bean文件,生明一个 isSelected变量,通过在数据中保存这个状态,来知道哪个item被选中了。

单选代码:

public class ListViewActivity extends AppCompatActivity {

    private List <String> mDate=new ArrayList<>();
    private ListAdapter listAdapter;

    @Override
    protected void onCreate(@Nullable final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.list_activity);

       ListView listView =  findViewById(R.id.lv);

       for(int i=0;i<100;i++){
           mDate.add("item"+i);
       }
        listAdapter = new ListAdapter(this,mDate);
       listView.setAdapter(listAdapter);

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               listAdapter.singleChoose(position);

           }
       });
    }


}

adapter

public class ListAdapter extends BaseAdapter {

    private Context context;
    private List<String> mDates;
    private LayoutInflater mLayoutInflater;
    private int lastClickPosition=-1;

    public ListAdapter(Context context, List mDates) {
        this.context = context;
        this.mDates = mDates;
        mLayoutInflater = LayoutInflater.from(context);

    }

    public void singleChoose(int position){
        lastClickPosition = position;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mDates==null?0:mDates.size();
    }

    @Override
    public Object getItem(int position) {
        return getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView==null){
             viewHolder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.item_list,parent,false);
            viewHolder.tvItem = convertView.findViewById(R.id.tvItem);
            viewHolder.imageView = convertView.findViewById(R.id.imageView);
            convertView.setTag(viewHolder);
        }else {

          viewHolder = (ViewHolder) convertView.getTag();
        }


        if(position==lastClickPosition){
            viewHolder.imageView.setImageResource(R.drawable.check);
        }else {
            viewHolder.imageView.setImageResource(R.drawable.nocheck);
        }
        viewHolder.tvItem.setText(mDates.get(position));

        return convertView;
    }

    static class ViewHolder{

        private TextView tvItem;
        private ImageView imageView;

    }
}

多选代码

public class ListMultipleViewActivity extends AppCompatActivity {

    private List <ListItemBean> mDate=new ArrayList<>();
    private ListMultipleAdapter listAdapter;
    private TextView tvClickNum;

    @Override
    protected void onCreate(@Nullable final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.list_activity);

       ListView listView =  findViewById(R.id.lv);
        tvClickNum = findViewById(R.id.tvClickNum);

       for(int i=0;i<100;i++){
           ListItemBean listItemBean = new ListItemBean();
           listItemBean.setSelected(false);
           listItemBean.setItemName("item"+i);
           mDate.add(listItemBean);
       }
        listAdapter = new ListMultipleAdapter(this,mDate);
       listView.setAdapter(listAdapter);

       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
           @Override
           public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               listAdapter.multipleChoose(position);

           }
       });

        tvClickNum.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int num=0;
               Iterator iterator = mDate.iterator();
                while (iterator.hasNext()){
                    ListItemBean listItemBean = (ListItemBean) iterator.next();
                    if(listItemBean.isSelected()){
                        num++;
                    }
                }
                if(num>0){
                    tvClickNum.setText("统计:被选中的item数量是"+num+"个");
                }
            }
        });
    }


}

多选adapter

public class ListMultipleAdapter extends BaseAdapter {

    private Context context;
    private List<ListItemBean> mDates;
    private LayoutInflater mLayoutInflater;
    private int lastClickPosition = -1;

    public ListMultipleAdapter(Context context, List mDates) {
        this.context = context;
        this.mDates = mDates;
        mLayoutInflater = LayoutInflater.from(context);
    }

    public void multipleChoose(int position) {
        ListItemBean listItemBean = mDates.get(position);
        if (listItemBean.isSelected()) {
            listItemBean.setSelected(false);
        } else {
            listItemBean.setSelected(true);
        }
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return mDates == null ? 0 : mDates.size();
    }

    @Override
    public Object getItem(int position) {
        return getItem(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if (convertView == null) {
            viewHolder = new ViewHolder();
            convertView = mLayoutInflater.inflate(R.layout.item_list, parent, false);
            viewHolder.tvItem = convertView.findViewById(R.id.tvItem);
            viewHolder.imageView = convertView.findViewById(R.id.imageView);
            convertView.setTag(viewHolder);
        } else {

            viewHolder = (ViewHolder) convertView.getTag();
        }


        if (mDates.get(position).isSelected()) {
            viewHolder.imageView.setImageResource(R.drawable.check);
        } else {
            viewHolder.imageView.setImageResource(R.drawable.nocheck);
        }
        viewHolder.tvItem.setText(mDates.get(position).getItemName());
        return convertView;
    }

    static class ViewHolder {

        private TextView tvItem;
        private ImageView imageView;

    }
}

item布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_margin="12dp">

        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:src="@drawable/item_selector" />


        <TextView
            android:id="@+id/tvItem"
            android:layout_marginLeft="12dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/imageView"
            tools:text="617283649821" />


    </RelativeLayout>

</LinearLayout>

listview_activity

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:padding="12dp"
        android:id="@+id/tvClickNum"
        android:text="统计:"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></ListView>

</LinearLayout>

demo下载
https://download.csdn.net/download/qq_26296197/10840545

发布了277 篇原创文章 · 获赞 84 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/qq_26296197/article/details/84941518