需要后退按钮返回到当前所在选项卡上的选项卡主机
Need back button to go back to tab host on the tab it was currently on
我目前正在开发一个 android 应用程序,我希望后退按钮返回到他们所在的上一个页面。当我使用片段时,我正在使用
.addToBackStack("tag")
在片段管理器事务中获得此影响。
但是我在使用选项卡主机时遇到了问题。在一页上我有三个选项卡。已完成的工作、活跃的工作和工作投标。在“职位出价”页面上,每个职位都有一个查看详细信息按钮。我希望当他们从该页面返回时,它返回到选项卡主机打开的页面,但转到它当前所在的选项卡。目前它将返回到 "Tab 1",这是活动工作,当我希望它转到 "Tab 2" 时,这是选项卡上的工作出价,因为这是按钮所在的那个,它来自哪里.我尝试使用,
.addToBackStack(host.getCurrentTabTag())
但这仍然让我回到了 "Tab 1"。想知道是否有办法轻松做到这一点。
如有必要,可以根据要求提供更多代码,谢谢。
编辑。
将其移动到下一个片段的代码。
fragmentManager.beginTransaction().replace(R.id.content, bidDetailsFragment).addToBackStack("tag").commit();
在我的应用程序中解决了另一个问题后,我终于回到了这个问题。为了解决这个问题,我首先检查了在打开页面的不同点调用了哪些方法。这是我的发现。
首次加载 - 1. 创建 2. 创建视图
选项卡已更改 - 1.选项卡已更改
正常页面加载 - 1. 创建视图时
这让我想到了创建一个变量来检查我在哪个选项卡上,然后每当页面加载时,它就知道我之前在哪个选项卡上。
我首先在页面顶部创建了变量。
private String tabTag;
然后我在 On Create Method 中将其设置为我希望 tabHost 启动的默认值。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tabTag = "Active";
if (getArguments() != null)
{
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
然后我输入一行代码,通过标签设置选项卡主机,这将允许每次调用 onCreateView 方法时,它会将选项卡设置为任何标签。
host.setCurrentTabByTag(tabTag);
然后我终于在 on Tab Changed Listener 内部将 tabTag 更改为当前的 tabTag。这允许 tabTag 字符串变量跟上当前标签。
host.setOnTabChangedListener(new TabHost.OnTabChangeListener()
{
@Override
public void onTabChanged(String tabId)
{
tabTag = host.getCurrentTabTag();
}
});
因此,每当单击后退按钮时,它都会 运行 onCreateView 方法并通过标签设置主机,首先 运行 将始终是活动标签,但之后它将是最后打开的标签页。
我目前正在开发一个 android 应用程序,我希望后退按钮返回到他们所在的上一个页面。当我使用片段时,我正在使用
.addToBackStack("tag")
在片段管理器事务中获得此影响。
但是我在使用选项卡主机时遇到了问题。在一页上我有三个选项卡。已完成的工作、活跃的工作和工作投标。在“职位出价”页面上,每个职位都有一个查看详细信息按钮。我希望当他们从该页面返回时,它返回到选项卡主机打开的页面,但转到它当前所在的选项卡。目前它将返回到 "Tab 1",这是活动工作,当我希望它转到 "Tab 2" 时,这是选项卡上的工作出价,因为这是按钮所在的那个,它来自哪里.我尝试使用,
.addToBackStack(host.getCurrentTabTag())
但这仍然让我回到了 "Tab 1"。想知道是否有办法轻松做到这一点。
如有必要,可以根据要求提供更多代码,谢谢。
编辑。
将其移动到下一个片段的代码。
fragmentManager.beginTransaction().replace(R.id.content, bidDetailsFragment).addToBackStack("tag").commit();
在我的应用程序中解决了另一个问题后,我终于回到了这个问题。为了解决这个问题,我首先检查了在打开页面的不同点调用了哪些方法。这是我的发现。
首次加载 - 1. 创建 2. 创建视图
选项卡已更改 - 1.选项卡已更改
正常页面加载 - 1. 创建视图时
这让我想到了创建一个变量来检查我在哪个选项卡上,然后每当页面加载时,它就知道我之前在哪个选项卡上。
我首先在页面顶部创建了变量。
private String tabTag;
然后我在 On Create Method 中将其设置为我希望 tabHost 启动的默认值。
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
tabTag = "Active";
if (getArguments() != null)
{
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
然后我输入一行代码,通过标签设置选项卡主机,这将允许每次调用 onCreateView 方法时,它会将选项卡设置为任何标签。
host.setCurrentTabByTag(tabTag);
然后我终于在 on Tab Changed Listener 内部将 tabTag 更改为当前的 tabTag。这允许 tabTag 字符串变量跟上当前标签。
host.setOnTabChangedListener(new TabHost.OnTabChangeListener()
{
@Override
public void onTabChanged(String tabId)
{
tabTag = host.getCurrentTabTag();
}
});
因此,每当单击后退按钮时,它都会 运行 onCreateView 方法并通过标签设置主机,首先 运行 将始终是活动标签,但之后它将是最后打开的标签页。