9

TabLayout和ViewPager - 在滑动抽屉项之间滑动之后,单击选项卡不起作用。TabLayout和ViewPager-Tab在滑动抽屉项之间滑动后不起作用

我工作的应用程序有滑动抽屉和Tablayout。 我参考本教程For Sliding DrawerFor TabLayout

内滑动抽屉

  1. 任务列表 - >TabLayout(Tabs(Today,Monthly,Yearly))
  2. 设置
  3. 订单

我有滑动抽屉和Tablayout之间的问题。 第一次viewpager正确加载。但是当我移动到下一个抽屉项目(设置片段)之后,返回到TaskList选项卡片段viewpager无法加载任何片段时,在滑动该页面时,然后加载少量片段。

这里的Java代码

public class TaskListFragment extends Fragment { 
private Toolbar toolbar; 
private TabLayout tabLayout; 
private ViewPager viewPager; 

public TaskListFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_my_page, container, false); 

    viewPager = (ViewPager)rootView.findViewById(R.id.viewpager); 
    tabLayout = (TabLayout)rootView.findViewById(R.id.tabs); 
    tabLayout.setupWithViewPager(viewPager); 
    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
     @Override 
     public void onTabSelected(TabLayout.Tab tab) { 
      viewPager.setCurrentItem(tab.getPosition()); 

     } 

     @Override 
     public void onTabUnselected(TabLayout.Tab tab) { 

     } 

     @Override 
     public void onTabReselected(TabLayout.Tab tab) { 

     } 
    }); 

    // Inflate the layout for this fragment 
    return rootView; 
} 

private void setupViewPager(ViewPager viewPager) { 
    ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager()); 
    adapter.addFragment(new Mypage_TodayFragment(), "TODAY"); 
    adapter.addFragment(new Mypage_TodayFragment(), "WEEKLY"); 
    adapter.addFragment(new Mypage_TodayFragment(), "MONTHLY"); 
    viewPager.setAdapter(adapter); 
} 

class ViewPagerAdapter extends FragmentPagerAdapter { 
    private final List<Fragment> mFragmentList = new ArrayList<>(); 
    private final List<String> mFragmentTitleList = new ArrayList<>(); 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mFragmentList.get(position); 
    } 

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

    public void addFragment(Fragment fragment, String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
} 
@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 

这里.XML代码

<android.support.design.widget.CoordinatorLayout 
     android:layout_width="match_parent" 
     android:layout_height="262dp" 
     android:id="@+id/view" 
     android:layout_weight="0.16"> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      app:tabGravity="fill" 
      app:tabBackground="@drawable/mytabselector" 
      app:tabIndicatorColor="@color/Orange" /> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="50dp" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior"/> 

     </android.support.design.widget.CoordinatorLayout> 

先谢谢了!

+3

使用'FragmentStatePagerAdapter'而不是'F ragmentPagerAdapter' –

回答

13

试试这个,而不是

ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

这是因为你有一个片段viewpager,片段经理,这viewpager应该使用,使片段交易应该是儿童片段管理者

+2

非常感谢!它的工作对我来说...告诉我另一件事getFragmentManager()在AppCompatActivity中不起作用? –

+0

由于您正在将片段加载到片段中(即您的视图页面加载片段,并且您的视图页面本身是一个单独的片段),您需要使用childfragmentmanager执行片段事务。你看到活动是父母,它的片段是它的孩子,孩子不能使用fragmentManager,fragmentManager是活动,孩子应该使用childFragmentManager – Bhargav