我有一个应用程序,它使用通过BaseExpandableListAdapter填充项目的ExpandableListView小部件.该应用程序是为Android 1.6版本构建的,当我使用Android Emulator(版本1.6版本)进行测试时,一切正常.我可以上下滚动列表,当我点击列表中的任何项目时,我得到一个onChildClick()事件.
但是,当我尝试在真正的Android手机上运行相同的应用程序(运行Gingerbread)时,如果我不滚动ExpandableListView,我只会获得onChildClick()事件.如果我滚动列表太多,我不再获取onChildClick事件(也没有itemClickEvents).
所以我很困惑.滚动后,为什么我没有为listview项目获取任何onChild或onItem点击事件?请注意,如果我只滚动一小部分(比如2或3行),我会获得点击事件,但是再滚动,然后我不再获得列表中任何项目的点击事件.
任何建议或意见将不胜感激.
谢谢.
好吧,我在这里回答我自己的问题,对于那些可能遇到同样问题的人.我遇到的问题似乎与ExpandableListView Widget的焦点状态有关.当我滚动列表时,ListView小部件似乎失去焦点,我无法选择任何列出的项目.我不确定解决这个问题的最佳方法是什么,但我确实让它发挥了作用.
我为ListView小部件添加了一个滚动侦听器,如show所示:
getExpandableListView().setOnScrollListener(this);
Run Code Online (Sandbox Code Playgroud)
然后我在我的活动中添加了一个方法,在完成滚动后将焦点设置回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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在这似乎解决了我的问题.我确信有更好的方法(如果你知道一个,请在这里发布),否则我的"黑客"似乎工作正常.
希望它可以帮助有类似问题的人.
| 归档时间: |
|
| 查看次数: |
1629 次 |
| 最近记录: |