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

时间:2016-02-10 12:09:27

标签: android android-fragments tabs android-tabs

我正在开发一款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) {

            }
        });
    }

3 个答案:

答案 0 :(得分: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;
                }
            }
        });

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

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