2013-02-08 36 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); 
之前得到的位置