【问题标题】:Disable click on tablayout, when setup with viewpager使用 viewpager 设置时禁用点击 tablayout
【发布时间】:2018-03-06 08:12:11
【问题描述】:

我有一个带有一些图标的 ViewPager(3 项)。当在第一个项目上时,图标被选中,可以滑动到下一个项目。等等。 选择第二个图标后,有可能转到第三项viewpager。 我有一个页面指示器(点),它通过 setupWithViewPager 与 ViewPager 连接。 问题是我想将 tablayout 上的可点击设置为 false,如果 viewPager 上的图标被选中,则解锁步骤。现在所有的“点”都是可点击的,我可以进入 ViewPager 的所有项目。

我只能在 OnPageSelected 函数中使用 TabLayout 进行操作... 怎么改?

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

    findViews(rootView);

    setOnClickListeners();
    buildTypeFragmentPagerAdapter = new BuildTypeFragmentPagerAdapter(getChildFragmentManager(), state);


    buildTypeViewPager.addOnPageChangeListener(new PageListenerAdapter() {
        public void onPageSelected(int position) {
            state.moveToPage(position);
            refreshViewState(false);
        }
    });

    dotsView.setupWithViewPager(buildTypeViewPager);


    return rootView;
}

我可以将dotsView的clickable设置为false,但它不起作用...

【问题讨论】:

    标签: java android android-viewpager android-tablayout


    【解决方案1】:

    为 api >24 试试这个:

    tabLayout.clearOnTabSelectedListeners();
    

    或对于

    tabLayout.setupWithViewPager(viewPager);
    
    LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
    for(int i = 0; i < tabStrip.getChildCount(); i++) {
        tabStrip.getChildAt(i).setOnTouchListener(new    View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                return true;
            }
        });
    }
    

    【讨论】:

    • 它不起作用...似乎我只能在 onPageSelected 函数中使用选项卡进行操作。不知道为什么。
    【解决方案2】:

    您可以扩展 TabLayout 类并覆盖方法“setupWithViewPager”。您需要调用 super 方法来填充选项卡。然后这将使用选项卡进行迭代并禁用点击:

    @Override
    public void setupWithViewPager(@Nullable ViewPager viewPager) {
        super.setupWithViewPager(viewPager);
    
        for (int i = 0; i < getTabCount(); i++) {
            Tab tab = getTabAt(i);
            if (tab != null) {
                tab.view.setClickable(false);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多