2013-02-16 2 views
0

탭 어댑터를 사용하여 탐색 탭이있는 Sherlock ActionBar을 구현했습니다.프래그먼트가 인스턴스화 된 addToBackStack()

public static class TabsAdapter extends FragmentPagerAdapter implements 
     ActionBar.TabListener, ViewPager.OnPageChangeListener 
{ 
    private final Context mContext; 
    private final ActionBar mActionBar; 
    private final ViewPager mViewPager; 
    private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

    static final class TabInfo 
    { 
     private final Class<?> clss; 
     private final Bundle args; 

     TabInfo(Class<?> _class, Bundle _args) 
     { 
      clss = _class; 
      args = _args; 
     } 
    } 

    public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) 
    { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mActionBar = activity.getSupportActionBar(); 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) 
    { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mActionBar.addTab(tab); 
     notifyDataSetChanged(); 
    } 

    @Override 
    public int getCount() 
    { 
     return mTabs.size(); 
    } 

    @Override 
    public Fragment getItem(int position) 
    { 
     TabInfo info = mTabs.get(position); 
     return Fragment.instantiate(mContext,info.clss.getName(), 
       info.args); 

    } 

    public void onPageScrolled(int position, float positionOffset, 
      int positionOffsetPixels) 
    { 
    } 

    public void onPageSelected(int position) 
    { 
     mActionBar.setSelectedNavigationItem(position); 
    } 

    public void onPageScrollStateChanged(int state) 
    { 
    } 

    public void onTabSelected(Tab tab, FragmentTransaction ft) 
    { 
     Object tag = tab.getTag(); 
     for (int i = 0; i < mTabs.size(); i++) 
     { 
      if (mTabs.get(i) == tag) 
      { 
       mViewPager.setCurrentItem(i); 
      } 
     } 
    } 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) 
    { 
    } 

    public void onTabReselected(Tab tab, FragmentTransaction ft) 
    { 
    } 
} 

내 문제가 addToBackStack() Fragment.instantiate()을 사용하는 방법 (또는 버튼을 다시 처리하기위한 다른 방법이 있는지) : 다음은 내 탭 어댑터 클래스는?

답변

1

내 문제는이 작업을 수행하지 말아야 정말

당신을 버튼

을 다시 처리하기위한 Fragment.instantiate 또는 다른 방법을 addtobackstack 사용하는 방법입니다. ViewPager에있는 조각이있는 탭을 사용하려는 경우 사용자가 앱을 사용하면서 탭 조각을 많이 전환하거나 스 와이프 할 수 있다고 가정하는 것이 안전합니다. 뒤로 버튼을 사용하면 활동을 원치 않을 때 자신의 단계를 재현하는 것이 매우 실망 스러울 수 있습니다 (15-20 번 탭 전환 후이 활동을 벗어나려고 할 때).

정말로 원하는 경우 사용자의 탐색 경로를 정수 목록/배열에 저장하십시오 (탭을 스 와이프/전환 할 때 사용자가있는 ViewPager 페이지의 int 위치를 저장할 때). 그런 다음 작업의 onBackPressed 메서드를 무시하고 이전 목록/배열의 마지막 위치 (적절한 탭 강조 표시와 함께)에 해당 위치로 이동하십시오 (BACK 버튼을 누를 때마다 팝업).

+0

제안 해 주셔서 감사드립니다. – user1526671

관련 문제