刷新列表视图后,它显示第一个位置数据

时间:2013-02-08 07:04:48

标签: android android-layout

我有一个很长的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));
    }

}

任何帮助将不胜感激。谢谢提前

5 个答案:

答案 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();

希望这会起作用