首页 > 解决方案 > 单击选项卡菜单以打开片段

问题描述

我有一个工作代码。我有一个 TabLayout 菜单和两个项目。此代码有效。但是当我向右或向左滚动屏幕时,另一个片段会打开。我不想要这个。单击选项卡菜单,我希望片段打开。例如,我希望在推送 A 片段时打开 A 片段。

我的片段适配器

public class MyFragmentAdapter extends FragmentPagerAdapter {

    int tabCount;

    public MyFragmentAdapter(FragmentManager fm, int numberOfTabs) {
        super(fm);
        this.tabCount = numberOfTabs;
    }

    @Override
    public Fragment getItem(int position) {

        switch (position) {
            case 0:
                WebFragment tab1 = new AFragment();
                return tab1;
            case 1:
                PromotionFragment tab2 = new BFragment();
                return tab2;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return tabCount;
    }
}

我的活动

public class MainActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

    TabLayout tabLayout;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

/** TabLayout and Fragments */
        tabLayout = findViewById(R.id.tab_layout);
        tabLayout.addTab(tabLayout.newTab().setText("A"));
        tabLayout.addTab(tabLayout.newTab().setText("B"));

        viewPager = findViewById(R.id.pager);
        final PagerAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(), tabLayout.getTabCount());
        viewPager.setAdapter(adapter);

        viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
        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) {
            }
        });
}
}

标签: androidandroid-fragmentsadapter

解决方案


通过自定义 ViewPager 对非滑动 ViewPager 的更简单的解决方案。

添加这个类

import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.animation.DecelerateInterpolator;
import android.widget.Scroller;
import java.lang.reflect.Field;

public class NonSwipeableViewPager extends ViewPager {

    public NonSwipeableViewPager(Context context) {
        super(context);
    }

    public NonSwipeableViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent arg0) {
        // Never allow swiping to switch between pages
        return false;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Never allow swiping to switch between pages
        return false;
    }
}

在 XML 布局中,而不是使用 ViewPager,替换为 NonSwipeableViewPager,这样您就可以实现“只需单击选项卡即可转到片段”


推荐阅读