2011-07-11 42 views
4

我有一个应用程序使用通过BaseExpandableListAdapter填充项目的ExpandableListView小部件。该应用程序是为Android 1.6版本构建的,当我使用Android模拟器(版本1.6构建)测试它时,一切正常。我可以上下滚动列表,当我点击列表中的任何项目时,我会得到一个onChildClick()事件。但是,当我尝试在真正的Android手机上运行同一个应用程序(运行姜饼)时,如果我不滚动ExpandableListView,我只会获取onChildClick()事件。如果我滚动列表太多,我不再获取onChildClick事件(也不itemClickEvents)。onChildClick事件在滚动列表视图后停止

所以我很困惑。为什么我在滚动后没有为列表视图项目获取任何onChild或onItem点击事件?请注意,如果我只滚动一小部分(例如2或3行),我会得到点击事件,但是再次滚动,然后我不再获得列表中任何项目的点击事件。

任何意见或建议,将不胜感激。

谢谢。

回答

5

好吧,我在这里回答我自己的问题,可能会遇到同样问题的其他人。我遇到的问题似乎与ExpandableListView Widget的焦点状态有关。当我滚动列表时,ListView小部件似乎失去了焦点,我无法选择任何列出的项目。我不确定最好的方法是纠正这一点,但我确实得到了这个工作。

我添加滚动听众为ListView控件的显示:

getExpandableListView().setOnScrollListener(this); 

然后我加入到我的活性的方法,将它一旦完成滚动将焦点设置回的ListView控件:

@Override 
public void onScrollStateChanged(AbsListView view, int scrollState) 
{ 
    // - this method is called when there is a scroll event in the main ExpandableListView widget. 

    // - after the user stops scrolling the listview, make sure to set the focus to the widget 

    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) 
    { 
     ExpandableListView elv = getExpandableListView(); 
    elv.requestFocusFromTouch(); 
    } 
} 

现在,似乎解决了我的问题。我相信有更好的方法(如果你知道一个,请在这里发布),否则我的“黑客”似乎工作正常。

希望它可以帮助有类似问题的人。

+0

这已经真正帮助me..just调试矿。 .thanks :) – SaKet

2

谢谢,这个答案解决了我在滚动时失去焦点的问题。

ListView mRecentSearchList; 

mRecentSearchList.setOnScrollListener(new OnScrollListener(){ 
         public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 

          //adapter.notifyDataSetChanged(); 
         } 
         public void onScrollStateChanged(AbsListView view, int scrollState) { 

          //adapter.notifyDataSetChanged(); 
          if(scrollState == OnScrollListener.SCROLL_STATE_IDLE ||scrollState == SCROLL_STATE_TOUCH_SCROLL || scrollState == SCROLL_STATE_FLING) 
          { 
           mRecentSearchList.requestFocusFromTouch(); 

          } 
         } 
         }); 
+0

为什么upvoting格式不正确的答案? – Stephan

+0

@Stephan(不是我) - 另一个问题可能是:为什么不格式化更容易;-)代码包含ctrl-K无法应对的标签... – kleopatra

+0

@kleopatra一个简单的解决方案:问问Eclipse家伙用他们的Java代码编辑器制作一个Web模块^^ – Stephan

0

我曾经历过一模一样的问题,我发现它是由名单本身,而是适配器(ResourceCursorTreeAdapter)未造成的。为防止团体崩溃,我在适配器中按如下方式进行了黑客行为:

@Override 
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
     View view = super.getGroupView(groupPosition, isExpanded, convertView, parent); 
     ExpandableListView list = (ExpandableListView) parent; 
     list.expandGroup(groupPosition); 
     return view; 
    } 

如果您也这样做,请尝试用不同的解决方案替换此项。

0

在我来说,我已经使用cohoman提出相同的解决方案,但是requestFocus()方法方法为我提供更好的用户体验:

navList.setOnScrollListener(new OnScrollListener() 
    { 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) 
    { 
     if(scrollState == OnScrollListener.SCROLL_STATE_IDLE) 
     { 
      navList.requestFocus(); 
     } 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 
    { 
     // TODO Auto-generated method stub 

    } 
    });