在ListView中添加Switch,让用户去点那个小小的开关的话体验不太好,通过点
击ListView的条目来改变Switch的开关状态.
目标效果
点击测试即可切换第一行的Swith的开关状态
需要注意的是正常添加的话Switch会屏蔽掉ListView的onItemClick事件,需要在Switch的布局文件中添加
android:focusable=“false”
否则将无法点击ListView的条目
MainActivity
public class MainActivity extends AppCompatActivity {private ListView lv;private Adapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lv=(ListView)findViewById(R.id.lv);adapter=new Adapter(MainActivity.this);adapter.addItem("测试");adapter.addItem("测试1");adapter.addItem("测试2");lv.setAdapter(adapter);lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {Switch aSwitch=adapter.getaSwitch(i);if(aSwitch.isChecked()){aSwitch.setChecked(false);//进行业务处理}else {aSwitch.setChecked(true);//进行业务处理}}});}}
ListView适配器
public class Adapter extends BaseAdapter {private List<String> list_title;private List<Switch> list_switch;private Context mContext;private TextView tv;private Switch aSwitch;public Adapter(Context context) {mContext=context;list_title=new ArrayList<>();list_switch=new ArrayList<>();}public void addItem(String title){list_title.add(title);}public Switch getaSwitch(int position){return list_switch.get(position);}@Overridepublic int getCount() {return list_title.size();}@Overridepublic Object getItem(int i) {return list_title.get(i);}@Overridepublic long getItemId(int i) {return i;}@Overridepublic View getView(int i, View view, ViewGroup viewGroup) {view= LayoutInflater.from(mContext).inflate(R.layout.item,null);tv=(TextView)view.findViewById(R.id.tv);aSwitch=(Switch)view.findViewById(R.id.aSwitch);list_switch.add(aSwitch);tv.setText(list_title.get(i));return view;}}
MainAvtivity的布局文件只有一个ListView
需要注意的是ListView条目的布局文件
<RelativeLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv"android:padding="10dp"android:layout_width="wrap_content"android:layout_height="wrap_content" /><Switchandroid:id="@+id/aSwitch"android:focusable="false"android:clickable="false"android:padding="10dp"android:layout_alignParentRight="true"android:layout_width="wrap_content"android:layout_height="wrap_content" /></RelativeLayout>
在条目布局文件中将Switch的clickable也关闭是为了方便操作,处理开关事件只需要在ListView的itemClickListener中进行,无需再在Switch的onClickListener中再进行一次.
源码下载地址
/download/woqq863787405/13637053
蓝奏:/iXFEOj9eh2b
最后,我只是安卓的新手,如有错误或更好的方法,欢迎大家在评论区进行讨论.