选择 TabLayout 中的选项卡时更改行为
Change behavior when a tab in TabLayout is selected
我有一个基本的 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 时,我希望该应用程序发出提示消息,说明无法查看选项卡 B,而不是实际导航到选项卡 B。
换句话说,我不希望应用导航到选项卡 B,我只希望它在用户点击选项卡 B 时停留在选项卡 A 上时显示 Toast 消息。
我试过类似的东西
((LinearLayout) tabLayout.getChildAt(0)).setEnabled(false);
但这没有用,因为上面的代码禁用了选项卡,所以它甚至不显示 Toast 消息,因为它没有感应到点击事件。
我觉得我需要让它保持启用状态(通过 setEnabled(true) 或其他方式)并以某种方式覆盖该方法,以便应用程序显示 Toast 消息而不是导航到另一个选项卡。
我怎样才能做到这一点?我找不到与此问题相关的任何其他 Whosebug post..
请帮忙!
尝试如下所示将监听器添加到 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) {
}
});
使用此代码 enable/disable 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;
}
}
});
我有一个基本的 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 时,我希望该应用程序发出提示消息,说明无法查看选项卡 B,而不是实际导航到选项卡 B。
换句话说,我不希望应用导航到选项卡 B,我只希望它在用户点击选项卡 B 时停留在选项卡 A 上时显示 Toast 消息。
我试过类似的东西
((LinearLayout) tabLayout.getChildAt(0)).setEnabled(false);
但这没有用,因为上面的代码禁用了选项卡,所以它甚至不显示 Toast 消息,因为它没有感应到点击事件。
我觉得我需要让它保持启用状态(通过 setEnabled(true) 或其他方式)并以某种方式覆盖该方法,以便应用程序显示 Toast 消息而不是导航到另一个选项卡。
我怎样才能做到这一点?我找不到与此问题相关的任何其他 Whosebug post..
请帮忙!
尝试如下所示将监听器添加到 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) {
}
});
使用此代码 enable/disable 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;
}
}
});