2016-02-10 25 views
1

我正在开发一个android应用程序。我使用TabLayout制表符。但我没有使用页面视图来选择选项卡上的片段。相反,我正在将事件监听器的片段替换为视图。我想在选择菜单项时取消选择所有选项卡。但是我在stackoverflow中看到了一个相同的问题。答案是不能做到这一点。因为必须选择一个选项卡。请参阅下面的我的场景。如何取消选择Android中的TabLayout的所有选项卡,因为选项菜单?

这是我的应用程序

enter image description here

的UI设计,正如你可以看到上面的设计,播客选项卡默认情况下选中。这是问题开始的地方。

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

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) { 

      } 
     }); 
    } 

所以,请帮我解决我的问题。谢谢。

+0

出于好奇,为什么不'ViewPager'与'tabLayout.setupWithViewPager(viewPager);' –

+0

因为我也有导航抽屉 –

+0

有啥导航抽屉与ViewPager和TabLayout做他们是独立的。杀人行为O. – sector11

回答

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)

你的流量就会像that.If你是制表1,当您可以更改所选标签的背景您点击设置按钮,然后点击按钮点击您可以更改选定选项卡的选定选项卡和背景。现在,当用户选择第一个选项卡时,他可以看到该选项卡的内容

Ps:因为较少的声誉,我没有评论它你的问题

0

我会推荐你​​使用一个布尔值来保存状态,例如,如果我不想要一个视图A来显示,我将通过创建一个布尔值来表示布尔值showA并将其设置为false,我将它设置为true,点击您所说的选项Item,我将设置该布尔值为false,这意味着A不会显示,因为它取决于布尔值。这应该做到这一点。希望这个帮助。

+0

例如,A表示抽屉项目,B表示选项?那么我将有两个主要的内容视图并有条件地切换它? –

相关问题