【问题标题】:TabLayout and ViewPager -Tabs doesn't work after swiping between sliding drawer itemsTabLayout 和 ViewPager - 在滑动抽屉项目之间滑动后选项卡不起作用
【发布时间】:2015-12-01 11:26:40
【问题描述】:

TabLayout 和 ViewPager - 在滑动抽屉项目之间滑动后点击标签不起作用。

我正在开发具有滑动抽屉和 Tablayout 的应用程序。 我参考这个教程For Sliding DrawerFor TabLayout

滑动抽屉内

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

滑动抽屉和 Tablayout 之间存在问题。 第一次 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>

提前致谢!!

【问题讨论】:

  • 使用FragmentStatePagerAdapter 而不是FragmentPagerAdapter

标签: android android-viewpager slidingdrawer android-tablayout


【解决方案1】:

试试这个而不是

ViewPagerAdapter adapter = new ViewPagerAdapter(getFragmentManager());

ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());

这是因为由于您在片段中有一个 viewpager,这个 viewpager 应该用来进行片段事务的片段管理器应该是一个 childfragmentmanager

【讨论】:

  • 非常感谢!!它对我有用...告诉我另一件事 getFragmentManager() 在 AppCompatActivity 中不起作用???
  • 因为您正在将片段加载到片段中(即您的视图分页器加载片段,而您的视图分页器本身是一个单独的片段),您需要使用 childfragmentmanager 执行片段事务。你看到activity是parent,它的fragment是它的children,children不能使用fragmentManager,fragmentManager是给activity的,children应该使用childFragmentManager
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多