android - ViewPager 无法滑动片段
问题描述
ViewPager 无法滑动片段。我正在使用 Drawer 活动,然后添加了一个BottomNavigationView
,并在主要内容中添加了一个FrameLayout
作为片段容器并TabLayout
位于BottomNaigationView
. 然后我做了一个名为PagerAdapter extends FragmnetPagerAdapter
.
我创建了一个构造函数并实现了getItem()
andgetCount()
方法,然后在MainActivity
我通过它的 id 初始化了所有视图但是当我运行应用程序时,除了在带有Viewpager
. 我应该做些什么才能让它发挥作用。
这是我的PagerAdapter
课:
public class PageAdapter extends FragmentPagerAdapter {
private int numberOfTabs;
public PageAdapter(FragmentManager fm, int numberOfTabs) {
super(fm);
this.numberOfTabs = numberOfTabs;
}
@Override
public Fragment getItem(int position) {
switch (position){
case(0) : return new HomeFragment();
case(1) : return new CouponFragment();
default : return null;
}
}
@Override
public int getCount() {
return numberOfTabs;
}
}
这是我的xml文件:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
带有 TextView 的工具栏来设置标题
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" >
<TextView
android:id="@+id/my_title"
android:text="Title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="25sp"
android:layout_gravity="center"
android:textColor="@color/white"
/>
</android.support.v7.widget.Toolbar>
这里的 TabLayout 添加了三个选项卡 Home、Coupons 和 Notifications。我希望 ViewPager 在三个选项卡之间滑动
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:tabGravity="fill"
app:tabIndicatorColor="@color/color"
app:tabMode="fixed"
app:tabSelectedTextColor="@color/color"
app:tabTextColor="@color/fadeWhite">
<android.support.design.widget.TabItem
android:id="@+id/tab_home"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Home"
style="@style/MyCustomTabLayout"
/>
<android.support.design.widget.TabItem
android:id="@+id/tab_coupons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Coupons"
style="@style/MyCustomTabLayout"
/>
<android.support.design.widget.TabItem
android:id="@+id/tab_notifiactions"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Notifiactions"
style="@style/MyCustomTabLayout"
/>
</android.support.design.widget.TabLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toTopOf="@id/navBar"
app:layout_constraintTop_toTopOf="parent"/>
<include layout="@layout/content_main" />
这是MainActivity
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
appBarLayout = (AppBarLayout) findViewById(R.id.app_bar);
tabLayout = (TabLayout) findViewById(R.id.tab_layout);
tab_home = (TabItem) findViewById(R.id.tab_home);
tab_coupons = (TabItem) findViewById(R.id.tab_coupons);
tab_noti = (TabItem) findViewById(R.id.tab_notifiactions);
viewPager = (ViewPager) findViewById(R.id.view_pager);
adapter = new PageAdapter(getSupportFragmentManager(),tabLayout.getTabGravity());
viewPager.setAdapter(adapter);
//setupToolBar
toolbar = (Toolbar) findViewById(R.id.toolbar);
my_title = (TextView) findViewById(R.id.my_title);
setSupportActionBar(toolbar);
my_title.setText(toolbar.getTitle());
getSupportActionBar().setDisplayShowTitleEnabled(false);
解决方案
这一行是错误的:
adapter = new PageAdapter(getSupportFragmentManager(),tabLayout.getTabGravity());
您应该将标签计数传递给您的适配器。tabLayout.getTabGravity() https://developer.android.com/reference/android/support/design/widget/TabLayout.html#getTabGravity()返回用于布局选项卡的当前重力。
推荐阅读
- php - 使用 WHMCS 本地 API 时,Vue 表单不使用 PHP 文件提交
- jquery - 在 Gridsome 中使用 jQuery 和 Popper.js
- c# - 如何在 .NET Core 中跨平台执行 shell 命令?
- c++ - 如何安装库
? - javascript - 将属性的值绑定到另一个组件的值
- php - php查找文件大小相似的文件并删除最旧的文件
- javascript - 测试服务时未调用 NestJS UseFilter
- excel - 比较两列,清除重复单元格
- laravel - Laravel:没有找到数据
- java - 有人可以解释一下 Eckel 的“On Java 8”一书中关于接口的例子吗?