首页 文章

选中TabLayout中的选项卡时更改行为

提问于
浏览
2

我有一个基本的TabLayout,在2个选项卡下有2个列表(选项卡A中的1个列表和选项卡B中的1个列表),使用如下所示的ViewPager进行设置 .

// CustomPagerAdapter extends PagerAdapter
CustomPagerAdapter adapter = new CustomPagerAdapter(getFragmentManager());
adapter.addFragments();
TabLayout tabLayout = findViewById(R.id.tab_layout);
ViewPager viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(PagerAdapter);
tabLayout.setupWithViewPager(viewPager);

给定的情况是用户在屏幕上看到选项卡A.此时,当用户点击选项卡B时,我希望应用程序发出一个Toast消息,表示无法查看选项卡B,而不是实际导航到选项卡B.

换句话说,我不希望应用程序导航到选项卡B,我只是希望它在用户点击选项卡B时停留在选项卡A上时显示Toast消息 .

我试过像 ((LinearLayout) tabLayout.getChildAt(0)).setEnabled(false); 这样的东西,但是这并没有显示Toast消息,因为它没有感知到click事件 .

我觉得我需要启用它(通过setEnabled(true)或其他东西)并以某种方式覆盖该方法,以便应用程序显示Toast消息而不是导航到另一个选项卡 .

我怎样才能做到这一点?我找不到与此问题相关的任何其他stackoverflow帖子 .

请帮忙!

2 回答

  • 0

    使用此代码启用/禁用tablayout中的任何选项卡:

    LinearLayout tabStrip = ((LinearLayout)tabLayout.getChildAt(0));
                tabStrip.getChildAt(1).setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
    
                         if(your condition) {
                        Toast.makeText(getActivity(), "Tab Enable", Toast.LENGTH_SHORT).show();
                        return false;
                        } else {                   
                        Toast.makeText(getActivity(), "Tab Disable", Toast.LENGTH_SHORT).show();
                        return true;
                         }
                    }
                });
    
  • 1

    尝试将监听器添加到tablayout,如下所示

    tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
                @Override
                public void onTabSelected(TabLayout.Tab tab) {
    
                }
    
                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
                    tab.select();
                    Toast.makeText(getContext(), "This is toast", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onTabReselected(TabLayout.Tab tab) {
    
                }
            });
    

相关问题