由于选项菜单,如何取消选择 Android 中 TabLayout 的所有选项卡?

How to deselect all the tabs of TabLayout in Android because of option menu?

我正在开发 Android 应用程序。我正在为选项卡使用 TabLayout。但是我没有在选项卡 selected 上使用寻呼机视图查看片段。相反,我将事件侦听器上的片段替换为视图。 I want to deselect all the tabs when an item in option menu is selected.但是我在 Stack Overflow 中看到了一个相同的问题。答案是不能这样做。因为标签必须 selected。

这是我应用程序的 UI 设计:

正如您在上面的设计中看到的,PODCASTS 选项卡默认为 selected。这是问题开始的地方。

这是我的选项菜单和功能的截图

问题是当我在 PODCASTS 选项卡上 select 设置时,设置片段被替换。但是 PODCASTS 选项卡仍然是 selected。但是当我再次点击时,播客列表片段并没有被替换回来。我该如何解决这个问题?

这就是我在 MainActivity 中向选项卡布局添加选项卡的方式:

private void setupTabs() {
        tabLayout.addTab(tabLayout.newTab().setText("Podcasts"));
        tabLayout.addTab(tabLayout.newTab().setText("Playlist"));
        tabLayout.addTab(tabLayout.newTab().setText("Downloads"));
        tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()){
                    case 1:
                        setPlaylistFragment();
                        commitFragment();
                        break;
                    case 2:
                        setDownloadsFragment();
                        commitFragment();
                        break;
                    default:
                        setPodcastListFragment(0, getResources().getString(R.string.app_name), "ALL_FRAGMENT");
                        commitFragment();
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });
    }

您可以在按下设置按钮时更改 selected 选项卡的背景 tabHost.getTabWidget().getChildAt(i) .setBackgroundColor(Color.parseColor("#393939")); 并将 selected 选项卡设置为其他选项卡,即 setSelected(1)

你的流程就像 that.If 你在 tab-1 上点击设置按钮然后点击按钮你可以改变你的 selected 标签和 selected 的背景tab.Now 当用户 select 第一个选项卡时,他可以看到该选项卡内容

P.s : 由于声誉较低,我没有对你的问题发表评论

我会建议您使用布尔值来保存状态,例如,如果我不想显示视图 A,我会通过创建一个布尔值 say boolean showA 并将其设置为 false 来使其成为条件,在呈现的页面上,我将其设置为 true,单击您说的选项 Item,我将再次将该布尔值设置为 false,这意味着 A 不会显示,因为它取决于布尔值。应该这样做。希望对您有所帮助。

我得到了答案。我也只需要重写 onTabReselected。所以我的听众会是这样的。

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                switch (tab.getPosition()){
                    case 1:
                        setPlaylistFragment();
                        commitFragment();
                        break;
                    case 2:
                        setDownloadsFragment();
                        commitFragment();
                        break;
                    default:
                        setPodcastListFragment(0, getResources().getString(R.string.app_name), "ALL_FRAGMENT");
                        commitFragment();
                        break;
                }
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {
                switch (tab.getPosition()){
                    case 1:
                        setPlaylistFragment();
                        commitFragment();
                        break;
                    case 2:
                        setDownloadsFragment();
                        commitFragment();
                        break;
                    default:
                        setPodcastListFragment(0, getResources().getString(R.string.app_name), "ALL_FRAGMENT");
                        commitFragment();
                        break;
                }
            }
        });