经常会碰到这种case, 希望打开一个listview的时候能够自动设置显示的位置, setSelection(int position)可以设置显示的位置, 但是发现setSeletction()不起作用.
这是需要把setSelection()的调用放到runnable()中:
post(new Runnable() {
run() {
listview.setSelection(position);
}
});
出现原因:
第一种:界面初始化完成之后listview失去了焦点。
第二种:因为listview的item高度不一致,或者添加了headerview,在setadapter之后调用setSelection无法准确定位。
解决办法:
第一种:
final ListView listView = new ListView(getActivity());
listView.post(new Runnable() {
@Override
public void run() {
listView.requestFocusFromTouch();//获取焦点
listView.setSelection(listView.getHeaderViewsCount()+10);//10是你需要定位的位置
}
});
第二种:
final ListView listView = new ListView(getActivity());
listView.postDelayed(new Runnable() {
@Override
public void run() {
listView.requestFocusFromTouch();
listView.setSelection(listView.getHeaderViewsCount()+10);
}
},500);