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);
}
}
내 원래 조각에 대한 조치, 나는 현재 스택에 조각을 추가했다.
이것은 효과가 있습니다. 누군가가 도움이되기를 바랍니다.
제안 해 주셔서 감사합니다. 지원 라이브러리에서 지원되는 경우 살펴 봅니다. 내가 더 오래된 API에 대한 애플 리케이션을 가질 수 있도록 최신 API에 자신을 자물쇠 싶습니다. 감사합니다. – Sam
비슷한 점에 대해서도 지원 라이브러리를 사용하고 있습니다. 실제로 내가 아는 한 ViewPager 내에서 단편을 사용할 수 있습니다. – Ciprian