我有一个非常复杂的ListView
。每个项目看起来像这样:
> LinearLayout (vertical)
> LinearLayout (horizontal)
> include (horizontal LinearLayout with two TextViews)
> include (ditto)
> include (ditto)
> TextView
> HorizontalScrollView (this guy is my problem)
> LinearLayout (horizontal)
在我的活动中,当一个项目被创建(getView()
被调用)时,我将动态TextView
添加到LinearLayout
内的HorizontalScrollView
(除了填写另一个,更简单的东西)。令人惊讶的是,性能非常好。
我的问题是,当我添加HorizontalScrollView
时,我的列表项变得无法点击。单击时它们不会获得橙色背景,并且它们不会触发我设置的OnItemClickedListener
(进行简单的Log.d
调用)。
如何重新点击列表项?
编辑在最顶层android:descendantFocusability="blocksDescendants"
设置LinearLayout
似乎有效。我想知道是否还有其他方法:如果我想在我的列表项中使用可聚焦项目怎么办?
答案 0 :(得分:8)
在最顶层的android:descendantFocusability="blocksDescendants"
上使用LinearLayout
就可以了。里面的元素仍然可以“点击”,它们只是不可聚焦(即你不能在非触摸屏设备上点击它们)。对我来说足够好了。
答案 1 :(得分:0)
当我将HorizontalScrollView应用于我的TableLayout时,滚动工作正常,但无法单击列表项 我的布局如下:
的LinearLayout HorizontalScrollView TableLayout ......... / TableLayout / HorizontalScrollView / LinearLayout中
我将android:descendantFocusability =“blocksDescendants”应用到我最顶层的linearlayout Any Help
答案 2 :(得分:0)
android:descendantFocusability="blocksDescendants"
对我没有帮助。 所以
所以,我实现了听众模式。
public interface EventListItemOnClickListener {
public void itemClicked();
}
并在适配器中通知所有侦听器
private List<EventListItemOnClickListener> listeners;
protected void notifyOnClick(int position){
for(int i=0; i<listeners.size();++i)
listeners.get(i).itemClicked((Event)events.get(position));
}
...
@Override
public void onClick(View v) {
notifyOnClick(position);
}
...