2013-02-08 31 views
2

我有一个很长的ListView,用户可以滚动。我每隔30秒刷新一次listview,listview刷新成功。但有一个问题,我希望列表滚动到刷新前的相同点。因为现在如果列表刷新,那么它显示第一个位置。刷新后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)); 
    } 

} 

任何帮助将是appreciated.Thanks提前

+1

这可能会帮助你http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview。 准确的事情你想要做的。 – NaviRamyle

回答

2

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

+1

感谢加入listView.setSelectionFromTop(startPosition,0);解决了我的问题 – PPD

0

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

1

你只需要做到这一点:

listView.setSelection(position) // position is the item on the listView 
0

你在做什么是你要当你调用刷新列表视图分配适配器

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

哪项是错误的

你必须刷新你的适配器

dataArr.notifyDataSetChanged(); 

希望这将工作

1

我认为,当你的列表视图将被刷新获取项目的位置,这是第一个可见当时然后刷新ListView和设置您耳目一新

int firstPosition = mEventListView.getFirstVisiblePosition(); 
    EventLogAdapter eventLogAdapter = new EventLogAdapter(mContext, events); 
    mEventListView.setAdapter(eventLogAdapter); 
    mEventListView.setSelection(firstPosition); 
之前得到的位置