2013-08-28 2 views
8

탐색 서랍을 구현했으며 탐색 서랍을 닫기 전에 조각을로드하고 싶습니다. 현재 조각은 서랍 닫기와 병렬로로드되므로 조각이 무거 우면 사용자 인터페이스가 약간 정지됩니다. 처음에는 (배경) 내 조각로드를 볼 수 있도록탐색 드로어가 닫히기 전에 조각로드

private class DrawerItemClickListener implements 
      ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
       long id) { 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
       ft.replace(R.id.content_frame, fragmentProfile); 
       ft.commit(); 
       drawerLayout.closeDrawer(drawerNaviListView); 
     } 
    } 

는 어떻게 변경할 수 있으며로드가 완료되면, 탐색 서랍이 닫히고 :

내가 가진 코드는?

답변

3

내 솔루션 조각을로드 할 수 있었다 : 실제로 서랍 지연 실행을 만들 수 사용 핸들러를 닫은 후 내부 loadFragment 방법은로드

public void onDrawerClosed() { 

// assure the request comes from selecting a menu item, not just closing tab 
if (selectedTab) 
    selectItem(mSelectedFragment); 
    selectedTab = false; 
} 
2

DrawerLayout.DrawerListener를 사용하여 드로어보기의 상태와 동작을 모니터링 할 수 있습니다. 애니메이션 도중 동안 레이아웃과 같은 값 비싼 작업을 수행하지 마십시오. 이 망가질 수 있습니다. STATE_IDLE 상태에서 값 비싼 조작을 수행하십시오. Source.

즉, 안드로이드는 단편을 교환하기 전에 서랍이 닫힐 때까지 기다리는 것이 좋습니다. 서랍이 닫힌 후

3

시도를 onDrawerClosed 호출합니다. 어떤 서랍 방법 onItemClick() 내부

을 닫을 때 중지가되지 않도록, 아래의 코드를 사용합니다 그것이 AsyncTask를을 만들

인 일을

Handler handler = new Handler(); 

Runnable runnable = new Runnable() { 

      @Override 
      public void run() { 
       FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
      ft.replace(R.id.content_frame, fragmentProfile); 
      ft.commit(); 

      } 
     }; 

     handler.postDelayed(runnable, 500); // here 500 is the delay 

// 다른 방법과 doInBackground() 메서드에서 조각 트랜잭션을 시작하고 onPostExecute()의 서랍을 닫습니다.

+1

위의 해결 방법은 정확하지만 ft.commit() 대신 ft.commitAllowingStateLoss()를 사용하십시오. 프래그먼트 상태가 손실로 이어지기 때문입니다. – Sivakumar

관련 문제