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;@Overrideprotected 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() {@Overridepublic 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();}@Overridepublic int getCount() {return mDates==null?0:mDates.size();}@Overridepublic Object getItem(int position) {return getItem(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;@Overrideprotected 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() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {listAdapter.multipleChoose(position);}});tvClickNum.setOnClickListener(new View.OnClickListener() {@Overridepublic 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();}@Overridepublic int getCount() {return mDates == null ? 0 : mDates.size();}@Overridepublic Object getItem(int position) {return getItem(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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"?><LinearLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="50dp"android:layout_margin="12dp"><ImageViewandroid: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" /><TextViewandroid: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="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:padding="12dp"android:id="@+id/tvClickNum"android:text="统计:"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"></ListView></LinearLayout>
demo下载
/download/qq_26296197/10840545