2017-10-29 3 views
0

私はListFragmentと関連するアダプタを持っています。listfragmentを最初に表示してから後でリストを読み込むことはできますか?

アダプターは、AbsListView.OnScrollListenerを実装しています。つまり、OnScroll()メソッドが呼び出されると、アダプタはAPIサービスを呼び出してリストをロードします。

問題は、ユーザーがListFragmentを開くボタンをクリックしたときに、ユーザーがフラグメントを見る前に少し時間がかかることです。

"Load"というメッセージが表示された後、ListFragmentが即座に表示されるように、デザインを変更したいと思います。誰にも推薦はありますか?ありがとう!

+0

これは基本的に、 'ViewFragment'がカスタム' View'を使用していない場合にデフォルトで既に実行しているもので、データがあるまで 'Adapter'を設定していません。 –

答えて

0

はい、ProgressBarを表示するなど、読み込み時に表示するためのビューを追加できます。

まず、あなたがLoaderManager

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

1.Addグローバルビュー

View startview; 

2.InsideとカスタムSimpleCursorAdapterコンストラクタは、プログレスバーを構築し、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); 

        ... 
} 
関連する問題