2017-10-29 6 views
0

ListFragment 및 관련 어댑터가 있습니다.listfragment를 먼저 표시 한 다음 나중에 목록을로드 할 수 있습니까?

어댑터는 AbsListView.OnScrollListener를 구현합니다. 즉, OnScroll() 메서드가 호출 될 때 어댑터는 API 서비스를 호출하고 목록을로드합니다.

문제는 사용자가 ListFragment를 여는 버튼을 클릭 할 때 사용자가 조각을 볼 수 있기까지 잠시 지연된다는 것입니다.

"Loading"메시지와 함께 단추를 클릭하면 ListFragment가 즉시 표시되도록 디자인을 변경하고 싶습니다. 누구든지 어떤 권고가 있습니까? 감사!

+0

기본적으로'ListFragment'는 기본적으로 사용자 정의'View'를 사용하지 않고, 데이터를 가질 때까지'Adapter'를 설정하지 않습니다. –

답변

0

예,로드 할 때 쇼 (예 : ProgressBar 표시)에 대한보기를 추가 할 수 있습니다.

첫째, 당신은에이 LoaderManager로 지정 SimpleCursorAdapter를 확장해야합니다

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

1.Add 글로벌 뷰

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); 

        ... 
}