android listview 切换,Android:在ListView适配器中切换OnCheckedChangeListener

我在我的应用程序中有一个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,当它有很多组件和数据源是复杂的。 –

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/243922.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

絮语之一:悲悯·海·《垂死的肉身》

有怜悯之心的人是可爱的。 但是悲悯之心却是很难的。怜悯容易,悲悯难。怜悯是情感,悲悯却是情怀和境界。悲悯是一种宗教,中国人少有。我崇拜基督。但觉得它太遥远,而且怕皈依了会坚守不住。所以只能远远地崇拜和学习。因为信了一但不能坚守,就…

鸿蒙之下5怎么跳城池,鸿蒙之空间道尊

“恩,一切都准备好了,也和伏羲兄长他们说好了,现在我们可以走了,”在女娲说完后,炫龙句看向后土和玄冥,看到二女也点着头,意思就是自己也和女娲一下安排好了巫族剩余的族人。原本按照天道原来的…

北京某打工子弟学校之一

北京有一批自愿帮助打工子弟学校的学生学习英语的中外青年人。他们利用周末的休息时间来到沙河某子弟学校,为孩子们进行义务授课。这是曾在美国学习英语的厄瓜多尔女孩和中国某汉语学校的英语老师在交孩子们学习阅读数字。这是从美国留学归来志愿教孩子们英语的北京…

北京某打工子弟学校之二

中国老师和韩国老师的师范英语教学引起了学生的好奇。一个插班小女孩的苦闷。你猜她们快乐么?外国女孩第一次当老师,却遭到学生们的躲避抵抗。这才叫聚精会神。课间男孩子也会打闹。

带控制端口的加法器

带控制端口的加法器 1 电路系统的工作原理 2 电路的VHDL语言描述方法及语法分析 1). 带控制端口加法器的源描述 2). 设计实体 3). 实体说明 4). 结构体 5). 进程 6). 顺序语句if 7). 位向量 8). 重载 1 电路系统的工作原理 该加法器有二个输入端口in1和in2,一个输出…

鸿蒙系统安兔兔排行榜,安兔兔评测鸿蒙版下载-安兔兔评测 鸿蒙版v9.0.7-PC6鸿蒙网...

需要调用以下重要权限- 允许应用程序打开网络套接字, 允许只读到电话状态访问,包括该装置的电话号码,当前蜂窝网络信息,任何正在进行的呼叫的状态,并且任何一个列表 PhoneAccount的注册在设备上, 允许应用程序访问Wi-Fi网络的信息…

北京某打工子弟学校之三

小孩子的画一般都寄托了着她们的理想。看到她们在画画,我于是也画了一匹马,她们直喊:画的像。哈哈。有困难找老师。

大历史小人物轻喜剧重悬疑:读刘连枢的长篇小说《暗宅之谜》

从《渴望》到《贫嘴张大民的幸福生活》,反映市民生活的京味儿电视剧给我们带来了令人难忘的眼泪和欢笑。至今,《渴望》还在电视台播放,吸引了新一代的观众;而《贫嘴张大民的幸福生活》对北京市民生活更加真实的展露,使…

比较器

比较器 1. 电路的工作原理 比较器用于比较两个位串所代表的整数的大小。比较器两个输入端分别是in1和in2,类型为位向量,另外还有一个输出端口pout,将比较的结果输出。如果in1小于in2,则pout输出“1”,否则输出为“0”。 2. VHDL语言描述方法及语法分析 (1) 比较器的…

在所有浏览器下一次性测试您的网站

一个名为Browsershots的新项目可以帮助Web设计师以非常小的代价查看所他们设计的网站在各种不同的浏览器和平台下的外观。\u0026#xD;\n你在Browsershots网站上所要做的事情就是输入网址,然后选中你需要测试的浏览器。Browsershots支持31种Linux浏览器、6种Windows浏…

“阳光天使”2007全国小姐大赛北京赛区决赛

2007年“阳光天使”全国小姐大赛北京赛区决赛在吉利大学举行。我作为评委参加。进入前5名的将要到武汉参加全国总决赛,之后选出5人参加世界洲际小姐总决赛。进入三甲的各有特色,冠军柏灵属于大众情人式的美人,能够获得普遍的审美认可。亚军唐…

基于Verilog的按键控制LED灯

按键控制LED灯 原理图 程序设计 `timescale 1ns / 1psmodule key_led( input sys_clk, input sys_rst_n, input [3:0] key, output reg [3:0] led);reg [23:0] cnt;reg [1:0] led_control;//定义一个计数器 计算led变化的时间always@(posedge sys_clk or negedge sys_rst_n)b…

wifidog android认证,wifidog+authpuppy认证页面的配置

路由器上我们使用wifidog 网关协议,服务器后端管理用authpuppy。首先,选择自己的操作系统,在http://www.authpuppy.org/doc/Main_Page网站里面,操作系统是Linux。然后到这个网站http://www.authpuppy.org/doc/Getting_Started去下…

蜂鸣器按键模块

按键控制蜂鸣器 原理如图 按键消抖模块 `timescale 1ns / 1ps module key_debounce(input sys_clk,input sys_rst_n,input key,output reg key_flag,output reg key_value);reg [31:0] delay_cnt; reg key_reg;//检测按键变化,并且设置延迟时间 always@(posedge sys_clk o…

《拯救人类》:很有可能改变人类历史进程的书

科学技术造福人类的能力越强,毁灭人类的威力也就越大,这种威力终将有可能灭绝人类。因此,没有什么问题比避免人类的被灭绝更重要的了。不仅如此,人们生活在一个竞争压力极大、贫富差距极大、安全系数极差的环境中,在幸…

android 清空所有控件,如何清空android ListView控件的内容

匿名用户1级2014-12-30 回答代码如下:BaseAdapter banew BaseAdapter(){public int getCount() {// TODO Auto-generated method stubreturn count;}public Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}public long getItemId(int a…

新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...

萨特与波伏瓦一九九四年第一期《北京文学》开始与北京部分作家发起和倡导的“新体验小说”联展至今已经一年了。在这一年的时间里,《北京文学》推出了《半日跟踪》、《富起来需要多少时间》、《大虾米直腰》、《在小酒馆里》、《预约死亡》、《枯坐街头》、《家道》…

触摸键控制LED

触摸键控制LED 原理图 程序如下 `timescale 1ns / 1ps module touch_led(input sys_clk,input sys_rst_n,input touch_key,output reg led);reg d0;reg d1;wire touch_en;always@(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)begind0 <= 1b0;d1 <= 1b1…