最近在项目中遇到一个很奇葩的问题,在listview中调用setSelection(position)或者smoothScrollToPosition(position)去跳转到指定的行时,无效。
在网上查了很多,但无外乎这几种方法:放到listview.post(new Runnable() { })在runnable中执行setSelection方法,或者让listview重新获得焦点,
但试了之后依然没作用。其实网上的办法多少都是复制粘贴。
后来重新分析了下原因,发现原来是因为自己的listview是前套在一个ScrollView中。而listview嵌套在ScrollView中会遇到的一个问题就是listview的
item不能全部显示,只能显示在一行上。后来使用了网上的一个方法
private void setListViewHeight(ListView listView){
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
int height = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItemView = adapter.getView(i, null, listView);
listItemView.measure(0, 0);