安卓listview设置焦点的焦点在不点击的情况下如何变色

Android学习笔记之ListView与Item的焦点冲突处理
时间: 00:56:00
&&&& 阅读:83
&&&& 评论:
&&&& 收藏:0
标签:由于ListView的Item需要焦点,Item里面的子控件(如ImageButton,Button,CheckBox等等)也需要焦点的时候,就会出现焦点冲突问题,导致Item无法获得焦点,无法相应Item的事件无法触发.这是就需要为其分配焦点,通常我们是屏蔽Item里面的子控件(暂时学的都是这样的,以后还不知道),有三种解决方案:(1)XML中对Item的子控件设置属性:&&&&&&&&&&&&&&&&&&&&&&&&&android:focusable="false"(2)在方法中对子控件设置属性(这里以Button为例): &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&btn.setFocusable(false);(3)在XML文件中对Item的根布局 进行属性设置:&&&&&&&&&&&&&&&&&&&&&&&&android:descendantFocusability="blocksDescendants"&&android:descendantFocusability属性共有三个取值分别为:&&&&&&&&& 1.beforeDescendants: & &&&&viewgroup会优先其子类控件而获取到焦点&&&&&&&&& 2.afterDescendants:&&&&&&&&viewgroup 只有当其子类控件不需要获取焦点时才获取焦点&&&&&&&&& 3.blocksDescendants:&&&&&&&viewgroup 会覆盖子类控件而直接获得焦点如下图所示650) this.width=650;" src="http://img.my.csdn.net/uploads//_5684.jpg" alt="_5684.jpg" />标签:原文地址:http://.blog.51cto.com/5380
&&国之画&&&& &&&&chrome插件
版权所有 京ICP备号-2
迷上了代码!本文出自汗血宝马,转载时请注明出处及相应链接。
本文永久链接: http://www.caotama.com/95733.html
Ɣ回顶部Exist in any way!
Android ListView 点击事件无法获得焦点简析
开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如ImageButton,Button,CheckBox等子控件(也可以说是Button或者Checkable的子类控件),此时这些子控件会将焦点获取到,所以常常当点击item时变化的是子控件,item本身的点击没有响应。
这时候就可以使用descendantFocusability来解决啦,API描述如下:
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落。心得:遇到不会不懂的地方除了网上查询资料之外,也可以多多去尝试每种属性的作用,多阅读官方文档(我始终觉得还是读原文的比翻译的理解的会更好)。
没有更多推荐了,Android ListView失去焦点后之前选中的项无法突出显示
[问题点数:40分,结帖人wengshh]
本版专家分:0
结帖率 100%
CSDN今日推荐
本版专家分:650
本版专家分:0
结帖率 100%
本版专家分:40
本版专家分:650
本版专家分:0
结帖率 100%
本版专家分:10
本版专家分:115
本版专家分:0
本版专家分:0
结帖率 100%
本版专家分:0
本版专家分:40
本版专家分:40
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐09:26 提问
安卓大神告诉我怎么让ListView自身的点击事件
安卓大神告诉我怎么让ListView的点击事件(不是item的点击事件,屏蔽掉item的点击事件,就点击ListView本身)和上下滑动事件共存。
按赞数排序
package com.wps.
import java.util.ArrayL
import android.app.A
import android.content.I
import android.os.B
import android.view.V
import android.widget.AdapterV
import android.widget.AdapterView.OnItemClickL
import android.widget.ArrayA
import android.widget.ListV
public class Layouts extends Activity {
/** Called when the activity is first created. */
private ListV
private ArrayList list = new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mylistview = (ListView)findViewById(R.id.listview);
list.add("LinearLayout");
list.add("AbsoluteLayout");
list.add("TableLayout");
list.add("RelativeLayout");
list.add("FrameLayout");
ArrayAdapter myArrayAdapter = new ArrayAdapter
(this,android.R.layout.simple_list_item_1,list);
mylistview.setAdapter(myArrayAdapter);
/*mylistview.setOnTouchListener(new OnTouchListener(){
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction() == MotionEvent.ACTION_DOWN)
mylistview.setBackgroundColor(Color.BLUE);
mylistview.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView&?& arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
if(list.get(arg2).equals("LinearLayout"))
Intent intent = new Intent("com.wps.android.LINEARLAYOUT");
startActivity(intent);
if(list.get(arg2).equals("AbsoluteLayout"))
Intent intent = new Intent("com.wps.android.ABSOLUTELAYOUT");
startActivity(intent);
if(list.get(arg2).equals("TableLayout"))
Intent intent = new Intent("com.wps.android.TABLELAYOUT");
startActivity(intent);
if(list.get(arg2).equals("RelativeLayout"))
Intent intent = new Intent("com.wps.android.RELATIVELAYOUT");
startActivity(intent);
if(list.get(arg2).equals("FrameLayout"))
Intent intent = new Intent("com.wps.android.FRAMELAYOUT");
startActivity(intent);
重写ListVIew组件,然后在滑动事件中判断移动距离,再来判断是滑动还是点击
有这样需求啊,好说,一个简单的重写就能解决问题。
继承ListView
使用的时候
调用的setOnClickListener的源码,直接就抛异常了,所以自定义类重写setOnClickListener的时候就不要调用super的了。
跟你说个简单的
把ListView 中 item 的点击动画给取消了并且不要让 item 中的控件能够获得焦点拦截点击事件
然后将onItemClickListener当作onClickListener处理就好了。效果妥妥的!!
不行的,运行报错, Caused by: java.lang.RuntimeException: Don't call setOnClickListener for an AdapterView. You probably want setOnItemClickListener instead
at android.widget.AdapterView.setOnClickListener(AdapterView.java:783)
你理解错我的意思了,不要用 setOnClickListener
这是一个比较取巧的行为
item 中如果有 Button,EditText这些可以获得焦点的控件的话,你点击Item 的时候点击事件会被拦截掉,也就不会调用onItemClick了
为了不让获得焦点可以这样做:(蓝色选中的内容)
事件分发的处理,在listview的dispachTouchEvent中直接
我可以问一下,你这么做的目的何在吗?为何会有这种奇怪的需求?
既然你都知道源码中写了,抛出的异常信息的意思是,“不要试图给AdapterView及其子类添加OnClickListener”,这说明谷歌官方都不允许你这么做。
如果你觉得我说的不对,那么你无视这条回复好了
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐}

我要回帖

更多关于 安卓listview点击事件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信