Android ListView焦点事件冲突问题与解决

Android ListView对于单纯列表展示是很好用的,但是一旦牵扯到对listView进行操作就会遇到各种各样的问题。比如保存Checkbox状态与item复用的冲突、遇到可获取焦点的控件比如说button、edxttext等与listView本身的点击事件冲突等。对于后者,这里不研究原因,只提供解决方案。

如果listView之中只有button这样会抢夺焦点的控件,最好的建议是直接把button换成Textview,直接规避焦点问题。

如果有些产品经理要求在listview的item中提供复杂操作,比如输入、单选复选等,这里提供一个简单的同时响应按钮控件,并且响应listView的onItemClick事件的解决方法:为整个ListItem添加OnTouch事件,在事件中将所有可能抢夺焦点的控件设置为不可获取焦点。这样就可以保证liistView响应OnItemClick事件,再对每个可能获取焦点的控件设置OnTouch事件,在之中将其设置为可获取焦点,注意对Button等在手指离开的时候要将其失去焦点。

具体代码如下

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

@Override

public boolean onTouch(View view, MotionEvent motionEvent) {

    if (view instanceof EditText) {

         //EditText设置为可焦点

         EditText editText = (EditText) view;

         editText.setFocusable(true);

         editText.setFocusableInTouchMode(true);

    else if(view instanceof Button || view instanceof RadioButton ) {

        //设置为可焦点,手指抬起时设为不可焦点

        if(motionEvent.getAction() == MotionEvent.ACTION_UP){

            view.setFocusable(false);

            view.setFocusableInTouchMode(false);

        }else{

            view.setFocusable(true);

            view.setFocusableInTouchMode(true);

        }

    }else {

        ViewHolder holder = (ViewHolder) view.getTag();

        //将所有有可能获取焦点的控件的setFocusable和setFocusableInTouchMode方法设为false

        setEditTextFoucsableFalse(holder);

    }

    return false;

}

注:如果存在EditText,为了保证输入法正常弹出,需要设置android:windowSoftInputMode="adjustPan"

结伴旅游,一个免费的交友网站:www.jieberu.com

推推族,免费得门票,游景区:www.tuituizu.com

时间: 2024-08-25 11:25:10

Android ListView焦点事件冲突问题与解决的相关文章

Android ListView 和 ScrollView 冲突问题

近期做一款APP,当中有一个类似微博的评论功能的界面,先是列出微博的正文内容和图片等.然后下边是评论. 一開始就想着用一个ScrollView把主要内容和评论区的ListView包起来.然后加入各个控件的内容就可以(对,感觉上有点像这个CSDN博客的编辑界面嘛),可是写出来之后发现ListView仅仅显示出了一个条目的高度.并且不能滑动,网上搜了一下发现原因是ScrollView和ListView都是可滑动的,把它们放在一块会有冲突.最后还是ScrollView获得了焦点.ListView不能滑

ScrollView与ListView的事件冲突

布局文件 当ListView嵌套在ScrollView中时,会发生冲突,导致ListView控件的拉动效果消失‘ 解决办法: 重写ListView的onTouchEvent(),并在返回前调用getParent().requestDisallowInterceptTouchEvent(true)  表示.不允许父层拦截或干扰本控件 Demo 1 package com.xqx.fight; 2 3 import android.app.Activity; 4 import android.os.

从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法

本篇文章假设读者没有任何的触摸事件基础知识,所以我们会从最基本的触摸事件分发处说起. ScrollView为什么会出现嵌套EditText出现滑动事件冲突呢?相信你会有这种疑问,我们来看这么一种情况: 有一个固定高度的EditText,假设它只能显示3行文本,但是,我们在其中输入的文本多余三行时,那么这时就需要可以在EditText内部进行小幅滚动了.那么将这个EditText放入了ScrollView当中, 并且ScrollView内容过多以致ScrollView也可以滑动,这时候就会出现Ed

仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现

仿百度壁纸客户端(三)--首页单向,双向事件冲突处理,壁纸列表的实现 上回把广告轮播图给实现了,今天就来把主页的大部分功能给实现了 一.ScrollView和ViewPager滑动事件冲突的解决办法 我们仔细想想,我们的主页架构,首先他是上下滑动的,所以这样要一个ScrollView,然后就是轮播图和其他内容了,这样的话,上下滑动有事件,轮播图也有事件,我们先看下xml的实现原理 home_fragment_xml <?xml version="1.0" encoding=&qu

Android——滑动事件冲突解决

android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件. android系统中的每个View的子类都具有下面三个与TouchEvent处理密切相关的方法: (1)public boolean dispatchTouchEvent(MotionEvent ev)这个方法用来分发TouchEvent (2)public boolean onInterceptTouchEvent(MotionEvent ev)这个方法用来拦截TouchEvent (3)publi

Android listview viewpager解决冲突 滑动

Android listview viewpager 滑动 跳动 冲突解决 ListView中嵌套ViewPage有或者滑动手势冲突解决 在listview 上使用 addHeaderView 在第一栏添加 viewpager 当做header 如: 当触发 滑动事件 的时候容易引起 滑动冲突    (比如斜着滑动viewpager  的时候 listview会跳动) 特别是在  下拉刷新或者上拉加载 的时候 , 组件可能会传递到viewpager当中 查阅了很多的帖子  发现修改起来都非常麻烦

Unity3D与android事件冲突的解决办法

Unity视图嵌入Android视图时曾经碰到过Android视图无法取得焦点的问题,原因就在于,NativeActivity在Android2.3以后被引入而且不支持该版本以下的设备.因为触摸/运动事件处理在本机代码,Java视图通常不会看到这些事件. 那么我们怎么去解决这些问题呢? 方法一: 在统一转发机制允许将事件传播到DalvikVM,AndroidManifest.xml文件中的activity子节点下增加如下两行代码: <meta-data android:name="andr

重写ListView解决ListView内部ViewPaper滑动事件冲突问题

很简单 重写ListView 其他类似问题解决ScrollView嵌套ViewPager出现的滑动冲突问题 http://blog.csdn.net/zhangyiacm/article/details/37903071 package com.zy.myview; import android.content.Context; import android.util.AttributeSet; import android.view.GestureDetector; import androi

Android动画及滑动事件冲突解决(转载)

原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重点和难点. 此篇转载文章思路清晰,结构合理,用图文混合的方式完美的讲解了动画和事件冲突的解决办法,值得珍藏,转载到我的博客中,可以时常研究一下.