5

Tôi có các tab ActionBar với tính năng xem trang. Vấn đề của tôi là trong các tab này, tôi không thể thay thế các đoạn. Tôi sử dụng đoạn mã dưới đây để thay thế các mảnh nhưng nó không thay thế, đoạn chính vẫn còn. Ngoài ra, trong các tab khác cũng có đoạn thứ hai tồn tại. TabListener của tôi cũng nằm dưới sự thay thế của các mảnh vỡ.Đoạn thay thế bằng ViewPager trong tab ActionBar

private void addFragment(Fragment fragment, boolean addToBackStack, int transition) 
{ 
    FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.details_container, fragment); 
    fragmentTransaction.setTransition(transition); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 

public static class TabsAdapter extends FragmentPagerAdapter 
     implements ViewPager.OnPageChangeListener, ActionBar.TabListener { 
    private final Context mContext; 
    private final ActionBar mBar; 
    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(FragmentActivity activity, ActionBar bar, ViewPager pager) { 
     super(activity.getSupportFragmentManager()); 
     mContext = activity; 
     mBar = bar; 
     mViewPager = pager; 
     mViewPager.setAdapter(this); 
     mViewPager.setOnPageChangeListener(this); 
    } 

    public void addTab(ActionBar.Tab tab, Class<? extends Fragment> clss, Bundle args) { 
     TabInfo info = new TabInfo(clss, args); 
     tab.setTag(info); 
     tab.setTabListener(this); 
     mTabs.add(info); 
     mBar.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); 
    } 

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

    @Override 
    public void onPageSelected(int position) { 
     mBar.setSelectedNavigationItem(position); 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 
    } 

    @Override 
    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); 
      } 
     } 
    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 

    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 

    } 
} 

Trả lời

Các vấn đề liên quan