我在我的应用程序中有一个listView。对于listView中的每个元素,它都有一个Switch。以前我在listView Adapter的getView方法中为Switch实现了一个onClickListener。但是,我发现虽然它在用户单击交换机时工作,但当用户在交换机上滑动时,它不起作用。然后我尝试将onClickListener更改为onCheckedChangeListener。当用户在Switch上单击或滑动时,它可以工作,但是,当我滚动ListView以使元素消失时,我发现最初选中的Switch未被选中。Android:在ListView适配器中切换OnCheckedChangeListener

你能帮忙吗?下面是我的getView方法在ListView适配器代码:

@Override

public View getView(final int position, View convertView, final ViewGroup parent) {

class viewHolder {

public TextView tvSceneName;

public Switch swSelectSwitch;

}

final viewHolder holder;

final View v = convertView;

// Use ViewHolder to avoid findViewById each time the user scroll

if (convertView == null) {

holder = new viewHolder();

convertView = mInflater.inflate(R.layout.scene_list_element, parent, false);

holder.tvSceneName = (TextView) convertView.findViewById(R.id.tvSceneName);

holder.swSelectSwitch = (Switch) convertView.findViewById(R.id.swScene);

convertView.setTag(holder);

} else {

holder = (viewHolder) convertView.getTag();

}

if(holder.swSelectSwitch != null) {

// Set the switch to correct on/off status

holder.swSelectSwitch.setChecked(mDataSource.get(position).get_isOn());

// Set up On checked change listener for the switch

holder.swSelectSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {

// Set the new status to arraylist

Switch sw = (Switch) v.findViewById(R.id.swScene);

MainActivity.sceneArrayList.get(position).set_isOn(sw.isChecked());

});

}

}

编辑: 在进一步的测试中,我发现有错误在我的新增onCheckChangedListener(因为我从复制的一些代码onClickListener)。另外我找到了一个解决方案,它是在我通过代码设置Switch之前将onCheckChangedListener设置为null。

if(holder.swSelectSwitch != null) {

// Set the switch to correct on/off status

holder.swSelectSwitch.setOnCheckedChangeListener(null);

holder.swSelectSwitch.setChecked(mDataSource.get(position).get_isOn());

// Set up On checked change listener for the switch

holder.swSelectSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override

public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {

// Set the new status to arraylist

mDataSource.get(position).set_isOn(isChecked);

});

}

2016-11-08

eepty

+1

您正在使用两个列表:

你应该mDataSource在发生变化时更新状态。他们有相同的参考?如果没有,你正在更新一个不同的列表,所以在你滚动之后清楚为什么你的复选框没有更新。其他的事情是你为什么不使用onCheckedChanged监听器的参数,而不是使用findviewbyId –

+0

@Alex你是对的,我发现我应该使用isChecked参数。我使用findviewbyId,因为我只是从onClickedListner复制代码。 onClickedListener没有这个参数。列表是一样的。事实上,我不清楚如何使用listView,当它有很多组件和数据源是复杂的。 –

android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener相关推荐

  1. linux 脚本 切换目录,在shell脚本中切换目录ros生成

    用VB打造自己的SQL连接器 大家好.....好长时间没上网了...祝大家新年快乐....好了.工程开始 现建一个普通窗口..放上3个textBox控件. 一个是用来输入ip的txtaddres..还 ...

  2. Android中ListView的使用以及使用适配器设置数据源

    场景 Android中使用Adapter(适配器)给RecycleView设置数据源: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/detail ...

  3. android listview item按钮,android-listview适配器中的按钮

    任何可以解决我的问题..经过2天的奋斗,我终于获得了70%的产出. Exp:我有listview哪些数据来自服务器.在Listview里面有一些文本,按钮和滚动索引A,BC,D,E,F,G. 问题:按 ...

  4. android listview 切换,Android ListView切换按钮

    我有一个Listview将列出数据库中的警报.我需要在每个列表项旁边添加一个切换按钮以设置警报的开/关状态. 如何在列表视图中添加切换按钮? R.layout.alarm_list: android: ...

  5. android listview高级,Android 高级控件笔记-列表视图ListView 基本适配器BaseAdapter

    我最近做项目用到了基本适配器BaseAdapter,所以写篇博客总结一下,希望也能对你有所帮助 什么时候用BaseAdapter(同一项存在多个控件,复杂的列表时) Android中Adapter类其 ...

  6. android listview动态添加viewpager,向 ViewPager 中添加 包含 ListView 的 Fragment

    对与fragment就不说什么了,直接看API手册吧,亲. 向 ViewPager 中添加 包含 ListView 的 Fragment 的过程比较麻烦.他所表现的效果就是新闻客户端的滑动翻页效果. ...

  7. android自定义空的view,ListView android中的自定义空视图

    如果ListView适配器中没有数据,我想显示刷新Button和TextView.我还希望能够向将重新加载列表的按钮添加单击侦听器.以下是我定义当前活动的方式: protected void onCr ...

  8. android cbox listview特效,Android CheckBox和ImageView、Textview在ListView中显示...

    1.首先创建一个适配器类CheckBoxListViewAdapter,此类继承BaseAdapter类: package com.test; import java.util.ArrayList; ...

  9. android微信模拟,Android中使用ListView模拟微信好友功能

    效果图: 分析: 1.创建listView 2.创建数据 3.创建适配器 将数据放到呈现数据的容器里面. 将这个容器(带数据)连接适配器. 其实是直接在我们自己写的adapter的getView重载方 ...

最新文章

  1. 深度学习先驱Bengio:AI顶会论文的Deadline是时候取消了
  2. 监控haproxy的脚本
  3. Angular 如何自定义 pipe 管道以及参数传递问题
  4. DetachedCriteria和Criteria的使用方法
  5. python工厂模式 取代__init___浅析Python 简单工厂模式和工厂方法模式的优缺点
  6. 高级语言中的关键字:const用法分析
  7. 二改注册登录版素材代下载搜索引擎系统源码,自带火车头采集
  8. python类的初始化方法_python学习之-对象的的初始化与__init__方法
  9. python使用sql读取数据表并返回dataframe
  10. Spring Security整合JWT,实现单点登录,So Easy~!
  11. android手机常用功能,Windows Phone 7/Android手机常用功能对比
  12. c++ 优先队列_数据结构 | TencentOStiny中队列、环形队列、优先级队列的实现及使用...
  13. 聊一聊大火的对比学习
  14. 工业级嵌入式串口转wifi模块
  15. 实例讲解EasyLanguage入门
  16. 阿里云天池大赛赛题解析——深度学习篇
  17. 【天池】金融风控贷款违约预测task5
  18. ssh登录提示密码错误
  19. 154 万 AI 开发者用数据告诉你,中国 AI 如何才能弯道超车?
  20. 百度经纬度转腾讯地图经纬度

热门文章

  1. qpython3可视图形界面_PySide——Python图形化界面入门教程(三)
  2. 利用逆矩阵解线性方程组_机器人学导论---第四章 操作臂逆运动学(一)4.1-4.11...
  3. linux php连接orcel,Linux下PHP连接Oracle数据库
  4. comet for java_java comet tomcat推送
  5. Gemstones(牛客第八场多校)
  6. rk3288 android4.4,ubuntu16.04下firefly rk3288的编译安卓4.4
  7. 分布电容和杂散电容_什么是“寄生电容”?
  8. 系统底部返回遮挡_一加7 Pro这个新功能让大家久等了:屏幕两侧一滑就可返回...
  9. python快速上手 让繁琐工作自动化 英文版_入门python:《Python编程快速上手让繁琐工作自动化》中英文PDF+代码...
  10. 『设计模式』小伙你的穿搭很潮!--装饰者模式