我对Java不是很有经验,所以我自己也搞不清楚。我买了一个带有如下表格布局的模板(图1):
我想禁用这两个选项卡之间的滑动功能,所以应该只能通过单击选项卡“选项卡2”来到达“选项卡2”。
有很多教程在互联网上,但没有一个适合我的代码,所以我有点困惑。
下面是我的标签片段:
public class TabFragment extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 2 ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View x = inflater.inflate(R.layout.tab_layout,null);
tabLayout = (TabLayout) x.findViewById(R.id.tabs);
viewPager = (ViewPager) x.findViewById(R.id.viewpager);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return x;
}
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position)
{
if(position == 0){
return new Tab1();
}
if(position == 1){
return new Tab2();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return "Tab 1";
case 1 :
return "Tab 2";
}
return null;
}
}}
和我的tab_layout. xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<android.support.design.widget.TabLayout
android:id="@+id/tabs"
app:tabGravity="fill"
app:tabMode="fixed"
android:background="@color/material_blue_grey_800"
app:tabIndicatorColor="@color/orange"
app:tabSelectedTextColor="@color/orange"
app:tabTextColor="@color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp">
</android.support.v4.view.ViewPager>
</LinearLayout>
我已经尽力想办法解决了,但是没有成功,所以我希望你们中的一个能帮我解决这个小问题:)
多谢了。
2条答案
按热度按时间xzlaal3s1#
你需要创建一个定制的
ViewPager
来拦截onTouch事件并避免默认行为,这样用户就不能在页面之间滑动,但可以触摸标签。您可以检查已回答的链接:How do disable paging by swiping with finger in ViewPager but still be able to swipe programmatically?
我将按步骤解释:
1.创建名为
NonSwipeableViewPager
的新类1.修改布局以使用新的ViewPager
1.使用新的ViewPager更新您的活动
您可以保留相同的适配器
MyAdapter
。这将避免在选项卡之间滑动,但将保持对每个选项卡的单击。
cnjp1d6j2#
我知道这是相当老,但你需要切换到ViewPager2。
ViewPager2取代了
androidx.viewpager.widget.ViewPager
,解决了其前身的大部分痛点,包括从右到左的布局支持、垂直方向、可修改的Fragment集合等。如果您需要禁用用户滑动支持,则可以致电: