android子视图没有按下状态
Posted
技术标签:
【中文标题】android子视图没有按下状态【英文标题】:android child view no press state 【发布时间】:2012-02-11 00:57:24 【问题描述】:我已经做了一个线性布局,我正在添加视图,模拟一个表格,因为我已经读到滚动视图中的列表视图不是一个选项:) 所以我在滚动视图中有一个带有 wrap_content 的线性布局。
问题是,对于我添加的视图,我无法触发任何按下状态来更改图形,因为它在列表视图中时效果很好。
我有以下几点:
if (arrayWorksWith.size()!=0)
this.listAdapter = new WorksWithListAdapter(this, R.layout.works_with_cell, R.id.lblItemTitle, arrayWorksWith);
for (int i=0; i<arrayWorksWith.size(); i++)
View v = this.listAdapter.getView(i, null, layoutTblWorksWith);
v.setTag(new Integer(1000 + arrayWorksWith.get(i).getId()));
v.setOnClickListener(this);
layoutTblWorksWith.addView(v);
问题是点击事件被触发,但我没有任何视觉反馈。在该视图中,我有一个背景设置为以下可绘制对象的 Imageview:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/r1" /> <!-- pressed -->
<item android:state_focused="true" android:drawable="@drawable/r1" /> <!-- focused -->
<item android:drawable="@drawable/transparent_background" /> <!-- default -->
</selector>
我也刚刚在我添加的视图上尝试了一个触摸监听器,但这也失败了:(
v.setOnTouchListener(new OnTouchListener()
public boolean onTouch (View v, MotionEvent event)
TextView lblCategoryTitle = (TextView)v.findViewById(R.id.lblItemTitle);
if(event.getAction() == MotionEvent.ACTION_DOWN)
lblCategoryTitle.setTextColor(R.color.white);
else if (event.getAction() == MotionEvent.ACTION_UP)
lblCategoryTitle.setTextColor(R.color.textLabel_blue);
return false;
);
因此,当我点击单元格时,当此代码位于 ListView 中时,图像正在更改背景并提供视觉反馈,但是当我现在创建它并将其添加到 LinearLayout 时,它停止工作。
有什么想法吗?我尝试过使用可聚焦、可点击、重复的父状态,但没有成功。
【问题讨论】:
【参考方案1】:您必须将 listView 设置为 OnItemClickListener,而不是 OnClickListener。
【讨论】:
以上是关于android子视图没有按下状态的主要内容,如果未能解决你的问题,请参考以下文章
奇怪的列表视图项目选择器外观(手指离开屏幕时未移除按下状态)