1,先上布局文件,利用了以前的布局,不要在意变量名称的细节
layout_wifi_item.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <CheckBox android:id="@+id/tv_wifiName" android:layout_width="match_parent" android:layout_height="100dp" android:background="@drawable/item_click" android:button="@null" android:gravity="center" android:text="123" android:textColor="@android:color/black" /> </LinearLayout>
2 drawable文件
item_click.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/colorAccent" android:state_selected="true" /> <item android:drawable="@color/colorAccent" android:state_checked="true" /> <item android:drawable="@color/white" /> </selector>
3.adapter
AbstractAdapter 这是adapter的父类,里面主要重写了BaseAdapter,不用在意
package com.my.test.mytestdemo.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import com.my.test.mytestdemo.R; import java.util.List; import java.util.Map; /** * Created by yyf on 2016/11/23. * * @Description: */ public class ItemClickAdapter extends AbstractAdapter { private Map<Integer, Boolean> map; public ItemClickAdapter(Context context, List listData, Map<Integer, Boolean> map) { super(context, listData); this.map = map; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView == null) { convertView = inflate(R.layout.layout_wifi_item); holder = new ViewHolder(); holder.tv_wifiName = (CheckBox) convertView.findViewById(R.id.tv_wifiName); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } if (map.get(position)){ holder.tv_wifiName.setChecked(true); }else { holder.tv_wifiName.setChecked(false); } holder.tv_wifiName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (holder.tv_wifiName.isChecked()) { for (Integer keys : map.keySet()) { if (map.get(keys)) { map.put(keys, false); } } map.put(position, true); } else { map.put(position, false); } notifyDataSetChanged(); } }); return convertView; } private class ViewHolder { private CheckBox tv_wifiName; } }
4.activity
package com.my.test.mytestdemo.listview.listview; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.ListView; import com.my.test.mytestdemo.R; import com.my.test.mytestdemo.adapter.ItemClickAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class ItemClickActivity extends AppCompatActivity { private ListView lv_list; private ItemClickAdapter adapter; private List<String> list = new ArrayList<String>(); private Map<Integer,Boolean> map=new HashMap<Integer, Boolean>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_item_click); initView(); } private void initView() { for (int i = 0; i < 5; i++) { list.add(i + ""); map.put(i,false); } lv_list = (ListView) findViewById(R.id.lv_list); adapter = new ItemClickAdapter(this, list,map); lv_list.setAdapter(adapter); lv_list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); } }
6,代码挺简单,就不做说明