我有一个ListActivity实现onListItemClick()并调用doSomething()该类的函数.后者包含l.setSelection(position)其中l是ListView对象.
现在有onClickListener()一个按钮点击,它会执行一些操作并且也会调用doSomething().
在第一种情况下,所选项目适当定位,但在后者中,没有任何反应.
有关这种奇怪行为的任何线索以及我如何使其发挥作用?
这适用于运行Android 4.4.2的平板电脑.我有一个包含数百个项目的ListView,一次可见约20个.用户不希望平滑滚动的动画.如何在不使用smoothScrollToPosition()的情况下以编程方式设置Listview中的显示位置?
我搜索了Stack Overflow,在Android ListView中,setSelection()似乎没有用,他们建议:
mListView.clearFocus();
mListView.post(new Runnable() {
@Override
public void run() {
mListView.setSelection(index);
}
});
Run Code Online (Sandbox Code Playgroud)
...但它只是设定选择; 它没有将ListView的那部分带入视图. setSelection()似乎是整个网络上流行的解决方案,但我在文档中找不到任何说setSelection()也设置位置的东西,它只设置选择而不改变我的位置.
在不使用smoothScrollToPosition转到Listview中的项目时,他们提出了Romain Guy的解决方案......
[myListView.post(new Runnable()
{
@Override
public void run()
{
myListView.setSelection(pos);
View v = myListView.getChildAt(pos);
if (v != null)
{
v.requestFocus();
}
}
});]
Run Code Online (Sandbox Code Playgroud)
这个问题是我的ListView是通过自定义适配器的getView()管理的ListActivity的一部分,因此不可见的视图被回收,即,如果我请求一个不在屏幕上的视图的子视图返回null.无论如何,它确实是我试图控制的ListView,所以通过子视图间接地做它似乎非常间接.
如何告诉ListView我想在屏幕上看到哪一部分?