我有一个很长的ListView,用户可以滚动。我每隔30秒刷新一次这个列表视图,listview刷新成功。但是有一个问题我希望列表滚动到之前刷新之前的相同点。因为现在如果列表刷新则显示第一个位置。
我正在通过AsynchronousTask更新列表:
private class HttpTask extends AsyncTask<String, Boolean, String> {
@Override
protected String doInBackground(String... params) {
System.out.println("inside doInBackground>>!!>>> ");
getResponse();
return "Executed";
}
@Override
protected void onProgressUpdate(Boolean... progress) {
}
@Override
protected void onPostExecute(String result) {
// publishProgress(false);
System.out.println("post excute funt***********");
setListAdapter(new ListAdapter(getApplicationContext(),
R.layout.mylist, dataArr));
}
}
任何帮助将不胜感激。谢谢提前
答案 0 :(得分:2)
尝试使用setSelectionFromTop()将位置设置为先前可见的状态。
答案 1 :(得分:1)
你必须这样做:
listView.setSelection(position) // position is the item on the listView
答案 2 :(得分:1)
我认为当您的列表视图要刷新时,获取当时首次显示的项目位置,然后刷新列表视图并设置刷新前的位置
int firstPosition = mEventListView.getFirstVisiblePosition();
EventLogAdapter eventLogAdapter = new EventLogAdapter(mContext, events);
mEventListView.setAdapter(eventLogAdapter);
mEventListView.setSelection(firstPosition);
答案 3 :(得分:0)
执行listAdapter.notifyDataSetChanged()而不是设置新的ListAdapter,这将刷新视图的内容而不是创建新的内容,列表视图不会向上滚动
答案 4 :(得分:0)
您正在做的是在调用refresh
时将适配器分配给列表视图setListAdapter(new ListAdapter(getApplicationContext(),
R.layout.mylist, dataArr));
哪个错了
您必须刷新适配器
dataArr.notifyDataSetChanged();
希望这会起作用