ListView项目不能用Horizo​​ntalScrollView里面单击

时间:2010-06-06 21:03:31

标签: android listview

我有一个非常复杂的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似乎有效。我想知道是否还有其他方法:如果我想在我的列表项中使用可聚焦项目怎么办?

3 个答案:

答案 0 :(得分:8)

在最顶层的android:descendantFocusability="blocksDescendants"上使用LinearLayout就可以了。里面的元素仍然可以“点击”,它们只是不可聚焦(即你不能在非触摸屏设备上点击它们)。对我来说足够好了。

答案 1 :(得分:0)

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

  

的LinearLayout   Horizo​​ntalScrollView    TableLayout    .........   / TableLayout   / Horizo​​ntalScrollView   / 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);
    }
...