由于选项菜单,如何取消选择 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;
}
}
});
我正在开发 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;
}
}
});