2013-12-07 4 views
0

NAVIGATION_MODE_TABS 모드에서 ActionBar를 사용하는 Android 애플리케이션이 있습니다.ActionBar Android

현재 조각을 많이 사용하고 있습니다. 그래서, 그것은 표시된 탭에 대해 꽤 잘 작동했습니다. 나는 내가 잘못된 방향으로 가고 있다고 생각하는 디자인 문제에 직면하고있다.

MainActivity에는 세 개의 탭이 있습니다. 하나의 탭에는 특히 여러 탭이 있습니다.

MainActivity

  • TAB1
  • TAB2
  • tab3에 요구 사항은 항상 탭을 유지하는 것입니다

(이것은 사용자가 클릭 무엇인지에 따라 서로 다른 조각을 표시한다 버튼이 있습니다) 같은 텍스트로 볼 수 있습니다. 그래서 MainActivity에서 상속받은 많은 액티비티를 만들었습니다. 사용자가 클릭 한 내용을 기반으로 세 번째 탭 콘텐트를 만들었습니다.

이렇게하면 좋은 흐름으로 콘텐츠를 유지하고 일관된 모양을 유지할 수있었습니다. 그러나 활동을 작성하는 데 오버 헤드가있는 것 같습니다.

FragmentManager와 pushToStack을 활용하려고했습니다. 그러나 그 경로는 효과가없는 것으로 보입니다.

나는이 인터페이스 ActionBar.TabListener를 사용하여 사용자가 탭을 클릭 할 때 기준으로 프래그먼트를 올바르게 첨부하고 분리합니다. 좋습니다. 그러나 문제가되는 다른 부분을 소개합니다.

희망 명확하고 명확한 조언을 원합니다.

본인은 다음과 같은 논리에 의존하여 해결 :

public class FragmentTabListener implements ActionBar.TabListener 
{ 
    private String _fragmentClassName; 
    private Context _context; 
    private Fragment _fragment; 
    private Boolean _cleanStack = true; 

    public FragmentTabListener(Context context, String fragmentClassName, 
      Boolean cleanStack) 
    { 
     _context = context; 
     _fragmentClassName = fragmentClassName; 
     _cleanStack = cleanStack; 

    } 

    public FragmentTabListener(Context context, String fragmentClassName) 
    { 
     this(context, fragmentClassName, false); 
    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) 
    { 
     cleanFragmentManagerStack(); 
     if (this._cleanStack) 
     { 
      ft.attach(_fragment); 
     } 
    } 

    private void cleanFragmentManagerStack() 
    { 
     if (this._cleanStack) 
     { 
      FragmentManager mgr = ((Activity) _context).getFragmentManager(); 
      int backStackCount = mgr.getBackStackEntryCount(); 
      for (int i = 0; i < backStackCount; i++) 
      { 
       // Get the back stack fragment id. 
       int backStackId = mgr.getBackStackEntryAt(i).getId(); 

       mgr.popBackStack(backStackId, 
         FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      } 
     } 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) 
    { 
     if (_fragment == null) 
     { 
      _fragment = Fragment.instantiate(_context, _fragmentClassName); 
      ft.add(android.R.id.content, _fragment); 
     } 
     else 
     { 
      ft.attach(_fragment); 
     } 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
     this.cleanFragmentManagerStack(); 
     // TODO Auto-generated method stub 
     ft.detach(_fragment); 

    } 

} 

내 원래 조각에 대한 조치, 나는 현재 스택에 조각을 추가했다.

이것은 효과가 있습니다. 누군가가 도움이되기를 바랍니다.

답변

0

내가 알기로는 사용자가 클릭 한 내용과 내부의 다른 조각 (중첩 된 조각은 현재 지원됨)을 기반으로 3 개의 조각이 하나의 탭에 있고 세 번째 탭에 조각이 있어야합니다.). 어쩌면 나는 당신의 문제를 정확하게 이해하지 못했을 것입니다.

건배!

+0

제안 해 주셔서 감사합니다. 지원 라이브러리에서 지원되는 경우 살펴 봅니다. 내가 더 오래된 API에 대한 애플 리케이션을 가질 수 있도록 최신 API에 자신을 자물쇠 싶습니다. 감사합니다. – Sam

+0

비슷한 점에 대해서도 지원 라이브러리를 사용하고 있습니다. 실제로 내가 아는 한 ViewPager 내에서 단편을 사용할 수 있습니다. – Ciprian