水平滚动视图(HorizontalScrollView)内的ListView项不可点击

6

我有一个相当复杂的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())时,我会向HorizontalScrollView内部的LinearLayout添加动态的TextView(除了填充其他更简单的内容)。令人惊讶的是,性能相当不错。
我的问题是,当我添加了HorizontalScrollView后,我的列表项变得无法点击。它们在被点击时不会出现橙色背景,并且它们不会触发我设置的OnItemClickedListener(进行简单的Log.d调用)。
如何使我的列表项再次可点击?
编辑:在最顶层的LinearLayout上设置android:descendantFocusability="blocksDescendants"似乎可以解决问题。但我想知道是否还有其他方法:如果我想要在我的列表项中拥有可聚焦的项目呢?
3个回答

9

在最上层的LinearLayout中使用android:descendantFocusability="blocksDescendants"就可以解决问题了。内部元素仍然可以被“点击”,但它们不可聚焦(即在非触摸屏设备上无法单击它们)。对我来说已经足够好了。


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);
    }
...

0

当我将HorizontalScrollView应用于TableLayout时,滚动正常工作,但无法单击列表项。 我的布局如下:

Linearlayout HorizontalScrollView TableLayout ......... /TableLayout /HorizontalScrollView /LinearLayout

我将android:descendantFocusability =“blocksDescendants”应用于最顶层的linearlayout。有什么帮助吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接