Android ListView item 不触发onItemSelectChanged的解决方法

原创 2013年12月02日 10:49:49

在用键盘或者遥控器操作ListView 时,当ListView中同一个item失去焦点,而又获取焦点,则不会触发onItemSelectChanged,但是此时还要想在onItemSelectChanged做一些操作处理。这时,就要用一些特殊的处理来解决此种需求:

     当ListView获得焦点的时候,设置它的selection为-1,但是如果强设会不起作用的,必须用反射机制来做。当失去焦点的时候可以用设置ListView的Adapter的focusIndex为-1.这样就可以达到无论怎么操作都会触发ListView的onItemSelectChanged方法。代码如下:

 

	public void onFocusChange(View view, boolean focus) {
		if (view.getId() == R.id.ap_list) {
			if (focus) {
				//ListView同一个item失去焦点后获得焦点,此时不会触发onItemSelectChanged方法
				settleUnselected(apListView);
			} else {
				adapter.setFocusIndex(-1);
				adapter.notifyDataSetChanged();
			}
		}

	}*/
	//利用反射机制将获得焦点的view选中标志位设为-1
			public void settleUnselected(View v) {
				try {
					@SuppressWarnings("unchecked")
					Class<ListView> c = (Class<ListView>) Class
							.forName("android.widget.ListView");
					Method[] flds = c.getDeclaredMethods();
					for (Method f : flds) {
								if ("setSelectionInt".equals(f.getName())) {
									f.setAccessible(true);
								f.invoke(v, new Object[] { Integer.valueOf(-1) });
								}
						}

				} catch (ClassNotFoundException e) {
					e.printStackTrace();
				}
				catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}


 

ListView同时响应itemclick事件和item控件的onClickListener时间的解决办法

listview可以根据自己的需求,重写baseadapter ,实现自己的布局及数据,但是当我们在自己的布局中加入了button或者ImageButton,还有其他比如checkbox,radiob...
  • wuyou1336
  • wuyou1336
  • 2016年07月20日 18:43
  • 1269

ListView中item点击事件、item保持选中状态以及其他细节

ListView获取Item点击事件 ListVIew子控件中包含button之类的控件,需要设置该button的android:focusable="false"属性,或者Listview-i...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2015年03月02日 20:07
  • 3591

Listview 获取由不可见到可见的item的index

项目需要统计listview中每个“曝光”的item的数据,即,随着滑动,某个item由不可见到可见,那我就需要把这个item的index获取到,以便后续操作。当然,如果某个item已经是可见的,那么...
  • moyinghui
  • moyinghui
  • 2015年03月16日 13:50
  • 2327

完美解决listView 文字超链接点击事件和listitem点击事件冲突问题

最近开发遇到listView中解析爬虫回来的html数据超链接点击问题。有文字html标签链接和纯网址链接混合。链接点击效果是有了但listview的item点击事件却失效了。现将解决办法和网友们分享...
  • hggliu
  • hggliu
  • 2016年05月04日 20:56
  • 902

改变ListView的item条目按下瞬间的背景

由于自己练习做项目的时候,要改变ListView点击按下瞬间的背景,花了不少时间找资料,问朋友,终于解决了。这里记录下来,当做笔记。 第一步:要把listSelector的设置为透明的颜色,因为它默...
  • linxi7
  • linxi7
  • 2016年07月20日 15:16
  • 1642

android listview item定义不同的样式布局

android listview item定义不同的样式布局 Android Listview 是常用的数据展现控件,往往用于显示列表形式的数据。如果仅仅显示数据往往会显得很单调,很多时...
  • u010507199
  • u010507199
  • 2015年04月16日 10:46
  • 1669

ListView动态刷新某项Item

使用ViewHolder来刷新某项数据,而不用每次都全部刷新数据。 继承BaseAdapter,新建ViewHolder类。 public class TestListAdapter extend...
  • yueqinglkong
  • yueqinglkong
  • 2015年07月01日 13:53
  • 18965

listView item 增加间距 以及item根部局 margin 失效原因

最近根据设计图写listView 的时候,listView个item 之间存在间距,左右上下都有,一开始的想法是在item 的根部局 设置margin 属性,但是在listView 中margin 无...
  • android_freshman
  • android_freshman
  • 2016年07月31日 10:26
  • 2809

android listview的item的展开与隐藏

实现listview展开与隐藏item的思路: 在item布局里面在写一个布局,使用布局方式根据需要来(如果需要展开的item在点击的item上面,就使用相对布局或者帧布局;如果需要展开的item在...
  • u010694658
  • u010694658
  • 2016年07月14日 14:53
  • 2528

自定义控件三部曲之动画篇(十三)——实现ListView Item进入动画

前言:宝剑锋从磨砺出,梅花香自苦寒来前面两篇我们讲解了使用layoutAnimation和LayoutTransition实现ViewGroup中Item加载动画的方法,但他们都各自存在问题:layo...
  • harvic880925
  • harvic880925
  • 2016年03月26日 21:29
  • 12023
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android ListView item 不触发onItemSelectChanged的解决方法
举报原因:
原因补充:

(最多只允许输入30个字)