2012-08-03 2 views
2
@Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     if(tab.getPosition()==0) 
     { 
      FragmentA frag = new FragmentA(); 
      ft.replace(android.R.id.content, frag); 

     } 
     else 
     { 
      FragmentB frag = new FragmentB(); 
      ft.replace(android.R.id.content, frag); 
     } 
    } 

위의 코드는 조각으로로드됩니다. 문제는 각 조각의 새 인스턴스를 만들어서 탭에서주고 받기 때문에 조각이 다시로드된다는 것입니다. 그것을 만드는 가장 좋은 방법은 각 조각 eahc 시간의 새로운 인스턴스를 생성하지 않고 원래 인스턴스 만 사용하는 것입니다.안드로이드에서 단편 생성하기?

감사

답변

0

그래서 우리는 다시 이미 조각을 다시 사용할 수 있습니다 떨어져

private frag = new Fragment(); 
... 

    if(tab.getPosition()==0) 
    { 
     ft.replace(android.R.id.content, frag); 

    } 
+0

이 작동하지 않습니다. –

0

당신은 가기 backstack 또는 팝업 항목에의 fragment를 밀어 방법을 추가해야합니다 클래스의 속성을 사용하여 스택.

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
    if(tab.getPosition()==0) 
    { 
     FragmentA frag = new FragmentA(); 
     popToOrPushFragmentWithName(frag, "FragmentA", ft); 

    } 
    else 
    { 
     FragmentB frag = new FragmentB(); 
     popToOrPushFragmentWithName(frag, "FragmentB", ft); 
    } 

} 

난이 도움이되기를 바랍니다 : 다음 함수의 "이름"PARAM은

private void popToOrPushFragmentWithName(Fragment fragment, String name, FragmentTransaction ft) { 
    FragmentManager manager = getSupportFragmentManager(); 

    // Scan the back stack for an entry with the given fragment name 
    int count = manager.getBackStackEntryCount(); 
    FragmentManager.BackStackEntry entry = null; 
    while (--count >= 0) { 
     FragmentManager.BackStackEntry check = manager.getBackStackEntryAt(count); 

     if (check.getName() != null && check.getName().equals(name)) { 
      entry = check; 
      break; 
     } 
    } 

    if (entry == null) { 
     // There is no entry, so push the fragment 
     ft.replace(R.id.fragment_container, fragment); 
     ft.addToBackStack(name); 
     // might not need this next line (since you are using tabselected override) 
     ft.commit(); 
    } else { 
     // Pop back to the existing fragment (0 = not inclusive, so our fragment by index is on top) 
     manager.popBackStackImmediate(entry.getId(), 0); 
    } 
} 

당신의 onTabselected는 다음과 같이 보일 것이다 찾아서 (필요한 경우) 다시 팝업하는 가장 좋은 방법을 제공합니다. :)

+0

줄 FragmentA frag = 새 FragmentA(); 새로운 조각을 만들지 않으므로 이전 상태를 덮어 씁니까? –

+0

어쨌든 오류가 발생하지 않습니다. –

+0

yea..i 이걸 좀 빨리 작성했습니다 .... 오류가 뭐죠? – petey