0

하나의 액티비티와 여러 조각으로 안드로이드 애플리케이션을 개발 중입니다. 내 앱에 탐색 창이 포함되어 있습니다. 레이아웃에 listview가 있습니다. 아이템을 클릭하면 조각이 동적으로 변경되어 ft.replace(R.id.my_placehodler, new MyFragment())이되고 backstack ft.addToBackstack(null)에 트랜잭션이 추가됩니다. 매번 새 트랜잭션을 만들 때 새로운 조각을 인스턴스화합니다. 그것은 나에게 좋은 접근 방법이 아닌 것처럼 보인다. 프래그먼트 트랜잭션을 생성하는 올바른 방법에 대한 제안을 해주시겠습니까?올바른 방법으로 조각을 만들 수 있습니다.

+0

조각 사이를 전환하기 위해 FragmentManager를 보았습니까? – epsilondelta

+0

아니요. fragmentmanager에서 조각의 개수를 추적해야한다는 의미입니까? – user3816018

답변

0

그냥 setFragment(FragmentClassObject,false,"fragment"); 메서드를 호출하십시오. 당신이 조각 같은 클래스의 여러 인스턴스를 instanciating 피한다면

public void setFragment(Fragment fragment, boolean backStack, String tag) { 
    manager = getSupportFragmentManager(); 
    fragmentTransaction = manager.beginTransaction(); 
    if (backStack) { 
     fragmentTransaction.addToBackStack(tag); 
    } 
    fragmentTransaction.replace(R.id.content_frame, fragment, tag); 
    fragmentTransaction.commit(); 
} 
0

, 즉 당신이, 당신이 태그를 사용하여 각 조각을 인식 할 수있는 조각의 클래스 당 하나의 인스턴스를 갖고 싶어합니다.

@Override 
public void onNavigationDrawerItemSelected(int position) { 
    String tag = ""; 
    switch (position) { 
    case 0: 
     tag = "fragment_0"; 
     break; 
    case 1: 
     tag = "fragment_1"; 
     break; 
    case 2: 
     tag = "fragment_2"; 
     break; 
    } 

    FragmentManager fragmentManager = getFragmentManager(); 
    Fragment fragment = fragmentManager.findFragmentByTag(tag); 
    if (fragment == null) { 
     // Only in case there is no already instaciated one, 
     // a new instance will be instanciated. 
     switch (position) { 
     case 0: 
      fragment = new Fragment_class_0(); 
      break; 
     case 1: 
      fragment = new Fragment_class_1(); 
      break; 
     case 2: 
      fragment = new Fragment_class_2(); 
      break; 
     } 
    } 

    fragmentManager.beginTransaction().replace(R.id.container, fragment, tag).commit(); 
} 
+0

당신의 답장에서 이미 조각화 태그를 설정해야만 조각 관리자로부터 가져올 수 있습니다. 내가 맞습니까? – user3816018

+0

설정하는 것만이 아닙니다. 먼저 동일한 클래스 (예 : Fragment_Class_1의 경우 'fragment_0', Fragment_Class_2의 경우 'fragment_1')에 대한 태그를 설정합니다. 둘째, 이미 인스턴스화 된 조각 객체가있는 경우이를 찾습니다 (findFragmentByTag). 이미 인스턴스화 된 객체가 없으면 클래스의 새 객체가 인스턴스화됩니다. – hata

관련 문제