2012-03-19 11 views
1

私はカスタムアダプタを作成し、notifyDataSetChanged()を呼び出してデータを更新しました。しかし、notifyDataSetChanged()の呼び出しの後、私はタッチでリストビューのスクロールを止めることはできません。 私はタッチイベントにリストビューをスクロールを停止するコードがありListViewのスクロールスクロールが機能しない

if (!mDataChanged) { ... } 

をAndroidのソースコードを見て、(リストビューの親である)ファイルAbsListView.classでそのコードを発見しました。

次に、notifyDataSetChanged()を呼び出すと、mDataChangedがtrueに設定され、スクロールを停止できなくなります。

データの変更後にスクロール停止を有効にする方法を教えてください。

答えて

0

おそらく、リストビューでgetItemメソッドが呼び出されている間にデータを読み込んでいます。非同期データ読み込み(ハンドラ)を使用する方が良いアイデアかもしれません。詳細は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();

は、次の行の書き込みの後に - アクセスできるすべてのフィールドがあり、indextop_listview

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

を任意の方法に。

+0

なぜそれが役立つと思いますか?コードアンドロイドでは(!mDataChanged){...}をチェックするので(ただし、あなたのコードをtryidして助けにならなかったので) – karabara

関連する問題