2016-03-24 5 views
3

SwipeRefreshLayoutを使用してPullToRefreshメカニズムでListViewを使用します。私はSwipeRefreshLayoutを動的にコードをListViewに追加します。リフレッシュするときにListViewが自動的に更新される前に消えます

SwipeRefreshLayout swipeRefreshLayout = new SwipeRefreshLayout(listView.getContext()); 

if (listView.getParent() != null) { 
    final ViewGroup parent = (ViewGroup) listView.getParent(); 
    final int index = parent.indexOfChild(listView); 
    parent.removeViewAt(index); 
    parent.addView(swipeRefreshLayout, index); 
    listView.setVisibility(View.VISIBLE); 
} 

swipeRefreshLayout.addView(listView); 
swipeRefreshLayout.setOnRefreshListener(...) { } 

上記のコードは、(リストビューは、現在であることを位置)親にswipeRefreshLayoutを追加し、その後swipeRefreshLayoutの子としてリストビューを追加します。

私がリフレッシュするときに、ネットワーク呼び出しが行われます。データが取得され、DBに格納され、CursorAdapterを使用してロードされます。

問題は:私はリフレッシュするために引くと

、私はすべての項目で第二のために空白の画面とUIの更新自体を参照してください。しかし、空白の画面が表示され、画面に触れると、クリックイベントに応答し、ListViewがすぐに表示されます。

データが取得されている間(PTRビューが表示されている間)常に表示され、新しいデータが利用可能になったら直ちに更新する必要があります。

私が間違っていることはありますか?私は、SwipeRefreshLayoutにrunnableをポストし、新しいデータをフェッチすることで、setRefreshingをtrueに実行しようとしました。私はこれが特にデータフェッチとは何の関係もないと思います。

ブランク画面が表示されている間は、アダプタが変更されていません(つまり、ListViewがまだ表示されているはずです)。

アイデア?

答えて

2

ビューを削除してから再度追加します。アダプターは新しいデータを再描画する必要があります。ビューを削除しないで、データとその準備を更新するときに、アダプタのnotifyDataSetChanged()を呼び出します。

+0

動的に追加するのではなく、XMLにSwipeRefreshLayoutを含めるようにコードを変更しましたが、まだ問題があります。 – sr09

関連する問題