2012-03-19 114 views
1

我做了自定義適配器並調用notifyDataSetChanged(),然後數據更新。但是在調用notifyDataSetChanged()之後,我無法停止通過觸摸來滾動listview。 我看着Android的源代碼,發現在文件AbsListView.class該代碼(這是ListView的母公司)ListView停止滾動不起作用

if (!mDataChanged) { ... } 

有一個代碼,以停止對觸摸事件滾動的ListView。

然後我們調用notifyDataSetChanged()我們將mDataChanged設置爲true,所以不能停止滾動。

你能幫我找出如何在數據更改後啓用停止滾動嗎?

回答

0

也許您正在讀取數據,而ListView調用getItem方法。使用異步數據加載(Handler)可能是一個更好的主意。你可能在this answer找到更多的信息。

0

您需要保存您的ListView的滾動位置,並滾動列表,直到列表刷新後再次滾動。

要做到這一點,調用此方法之前adapter.notifyDataSetChanged();

private void saveListScrollPosition() { 
     // save index and top position 
     index = _listview.getFirstVisiblePosition(); 
     View view = _listview.getChildAt(0); 
     top = (view == null) ? 0 : view.getTop(); 
    } 

並經過adapter.notifyDataSetChanged();

寫入以下行 -

// restore list scroll position 
    _listview.setSelectionFromTop(index, top); 

其中,indextop_listview都可以訪問所有領域到任何方法。

+0

你爲什麼認爲它應該幫助?因爲在代碼中android檢查是否(!mDataChanged){...}(但是我嘗試了你的代碼,但它沒有幫助) – karabara 2012-03-19 11:53:40