2016-03-24 28 views
3

我使用ListView與PullToRefresh機制使用SwipeRefreshLayout。我在初始化時將代碼中的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的孩子。

當我進行刷新時,會進行網絡調用 - 數據被提取,存儲在數據庫中,並使用CursorAdapter加載。

問題:

當我拉來刷新,我看到空白屏幕一秒鐘,並與所有的項目的UI更新自己。但是當空白屏幕顯示並且我觸摸屏幕時,它會響應點擊事件並立即顯示ListView。

我需要ListView在顯示數據時(PTR視圖顯示時)顯示所有的時間,並在新數據可用時立即更新。

有什麼我做錯了嗎?我已經嘗試通過發佈一個可運行的SwipeRefreshLayout並獲取新數據來將setRefreshing運行爲true。我不認爲這與數據獲取有什麼關係。

適配器在空白屏幕出現時沒有被更改(這意味着ListView應該仍然可見)。

任何想法?

回答

2

您將刪除視圖然後重新添加它。適配器應該負責重新繪製新的數據。不要刪除視圖,而是在刷新數據及其就緒時,在適配器上調用notifyDataSetChanged()。

+0

我改變了我的代碼,以便在XML中包含SwipeRefreshLayout而不是動態添加它,而且我仍然看到了問題。 – sr09