您的位置:首页 > 其它

在ListView中嵌套Switch开关,点击ListView条目来切换Switch的状态

2016-11-28 15:20 871 查看
在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;

@Override
protected 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() {
@Override
public 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);
}

@Override
public int getCount() {
return list_title.size();
}

@Override
public Object getItem(int i) {
return list_title.get(i);
}

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

@Override
public 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="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<TextView
android:id="@+id/tv"
android:padding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Switch
android: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中再进行一次.

源码下载地址

CSDN资源到上限了QAQ,百度云失效的话提醒我一下

百度云:https://pan.baidu.com/s/1kUCfhoN

最后,我只是安卓的新手,如有错误或更好的方法,欢迎大家在评论区进行讨论.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐