2017-10-29 93 views
0

我有一個ListFragment和一個關聯的適配器。我可以先顯示listfragment,然後再加載列表嗎?

該適配器實現了AbsListView.OnScrollListener。簡而言之,當調用OnScroll()方法時,適配器將調用API服務並加載列表。

問題是,當用戶單擊打開ListFragment的按鈕時,用戶可以看到片段之前有一個短暫的延遲。

我想更改設計,以便ListFragment在單擊按鈕並顯示消息「正在加載」後立即顯示。有沒有人有任何建議?謝謝!

+0

這基本上就是'ListFragment'在默認情況下已經做了什麼,如果你沒有使用自定義的'View',並且你沒有設置'Adapter'直到你有數據。 –

回答

0

是的,您可以在加載時添加一個顯示視圖,例如顯示ProgressBar。

首先,你需要擴展自定義SimpleCursorAdapter與LoaderManager

public class CustomSimpleCursorAdapter extends SimpleCursorAdapter implements LoaderManager.LoaderCallbacks<Cursor> 

1.增加全球視野

View startview; 

2.Inside的構造打造進度條,並設置LoaderManager的回調

 //Build the progressBar 

ProgressBar progressBar = new ProgressBar(this.mContext); 
     progressBar.setLayoutParams(new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, Gravity.CENTER)); 
     progressBar.setIndeterminate(true); 
    //Set startview for future call and add to root view 

     startview = progressBar; 
     root.addView(startview); 

    //Set Interface the LoaderManager will call to report 
     context.getLoaderManager().initLoader(0,null,this); 


3.重寫onLoadFinished以在完成後刪除進度欄視圖。

 @Override public void onLoadFinished(Loader<Cursor> loader,Cursor data) { 
     if (startview!=null) { 
      if (startview.getParent()!=null) { 
       ((ViewGroup)startview.getParent()).removeView(startview); 
             } 
         } 
     } 


4.設置使用自定義光標適配器

全球

protected CustomSimpleCursorAdapter mAdapter; 

覆蓋的onCreate爲集使用自定義適配器

 @Override 
     protected void onCreate(Bundle savedInstanceState) { 
        ... 

      mAdapter = new CustomSimpleCursorAdapter(context, layout, c, from, 
       to, flags); 
    listview.setAdapter(mAdapter); 

        ... 
} 
相關問題