2

我有一个很长的 ListView,用户可以滚动。我每 30 秒刷新一次此列表视图,列表视图刷新成功。但是有一个问题,我希望将列表滚动到与刷新之前相同的位置。因为现在如果列表刷新,那么它会显示第一个位置。

我通过 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));
    }

}

任何帮助将不胜感激。在此先感谢

4

5 回答 5

2

尝试使用 setSelectionFromTop() 将位置设置为先前可见的状态。

于 2013-02-08T07:22:28.580 回答
1

你只需要这样做:

listView.setSelection(position) // position is the item on the listView
于 2013-02-08T07:37:57.277 回答
1

我认为当您的列表视图将被刷新时,获取当时第一次可见的项目的位置,然后刷新您的列表视图并设置您在刷新之前获得的位置

    int firstPosition = mEventListView.getFirstVisiblePosition();
    EventLogAdapter eventLogAdapter = new EventLogAdapter(mContext, events);
    mEventListView.setAdapter(eventLogAdapter);
    mEventListView.setSelection(firstPosition);
于 2013-02-08T08:19:04.543 回答
0

而不是设置一个新的 ListAdapter,做 listAdapter.notifyDataSetChanged() 这将刷新视图的内容而不是创建新的,并且列表视图不会向上滚动

于 2013-02-08T07:22:11.487 回答
0

您正在做的是在调用刷新时将适配器分配给列表视图

setListAdapter(new ListAdapter(getApplicationContext(),
            R.layout.mylist, dataArr));

哪个是错的

你必须刷新你的适配器

dataArr.notifyDataSetChanged();

希望这会奏效

于 2013-02-08T08:04:19.950 回答