Android view同时响应焦点和点击事件

项目需求,在一个list中点击某一个item,item中的文字颜色会变化,同时要响应点击事件。

对于文字颜色变化的需求我用selcetor来实现。

当我点点击一个item时,之前的item就要恢复原始状态,这就需要整个list中有一个互斥变量。我第一个时间想到了focus(也可以自己维护一个专门保存状态的列表,但是我觉得麻烦),设置控件android:focusableInTouchMode="true"和android:focusable="true"之后测试发现,颜色变化效果是可以了,但是没有响应点击事件,要点第二次的时候才响应点击事件。

这样肯定是不行的,解决办法就是监听焦点的变化事件,然后在里面手动触发点击事件。判断的关键就在View#isInTouchMode(),这个方法表示当前是否是触摸模式,如果是触摸模式,控件第一次获得焦点的同事就要响应点击事件

public View.OnFocusChangeListenermOnFocusChangeListener=new View.OnFocusChangeListener() {

@Override

 public void onFocusChange(View view, boolean hasFocus) {

if(hasFocus){

// 如果是touchmode就执行click,否则就会只是选中。

if (view.isInTouchMode()){

view.performClick();

            }

}

}

};

如粗依赖我们就可以同时响应焦点和点击事件了。

参考:https://blog.csdn.net/mcryeasy/article/details/53708493

https://blog.csdn.net/jaycee110905/article/details/8240677

你可能感兴趣的:(Android view同时响应焦点和点击事件)