如何根据选项菜单取消选择Android中TabLayout的所有选项卡?

问题描述 投票:3回答:3

我正在开发一款Android应用。我正在使用TabLayout作为标签。但我没有在选定的选项卡上使用分页器视图作为片段。相反,我将事件监听器上的片段替换为视图。我想在选择选项菜单中的项目时取消选择所有选项卡。但我在Stack Overflow中看到了一个相同的问题。答案是做不到这一点。因为必须选择一个选项卡。

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

enter image description here

正如您在上面的设计中所看到的,默认情况下会选择PODCASTS选项卡。这是问题的开始。

以下是我的选项菜单和功能的屏幕截图

enter image description here

enter image description here

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

这就是我在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) {

            }
        });
    }
android android-fragments tabs android-tabs
3个回答
1
投票

我得到了答案。我只需要覆盖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;
                }
            }
        });

0
投票

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

您的流程将是这样的。如果您在tab-1上并单击设置按钮然后单击按钮,则可以更改所选选项卡和所选选项卡的背景。现在,当用户选择第一个选项卡时,他可以看到该选项卡内容

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.