我目前正在开发一个Android应用程序,我希望后退按钮返回到他们所在的上一页。当我使用片段时,我正在使用
.addToBackStack("tag")
在片段管理器事务中以获得此影响。
但是当我使用标签主机时,我遇到了问题。在一个页面上,我有三个选项卡。完成工作,活跃工作和工作投标。在页面上的作业出价中,每个作业都有一个查看详细信息按钮。我想当他们从这个页面返回时返回到选项卡主机的页面,但转到当前的选项卡。目前,它将返回“标签1”,这是活动作业,当我希望它转到“标签2”时,这是作业按钮所在的标签,因为它是按钮所在的位置以及它来自哪里。我试过用,
.addToBackStack(host.getCurrentTabTag())
但这仍然让我回到“标签1”。想知道是否有办法轻松做到这一点。
如有需要,可以提供更多代码,谢谢。
编辑。
将其移动到下一个片段的代码。
fragmentManager.beginTransaction().replace(R.id.content, bidDetailsFragment).addToBackStack("tag").commit();
答案 0 :(得分:0)
在我的应用程序中修复了另一个问题后,我终于回到了这个问题。为了解决这个问题,我首先检查了在打开页面的不同点调用了哪些方法。以下是我的发现。
首次加载 - 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);
然后我终于在Tab Changed Listener中将tabTag更改为当前tabTag。这允许tabTag String变量允许跟上当前标记。
host.setOnTabChangedListener(new TabHost.OnTabChangeListener()
{
@Override
public void onTabChanged(String tabId)
{
tabTag = host.getCurrentTabTag();
}
});
因此,无论何时单击后退按钮,它都将运行onCreateView方法并通过标记设置主机,该标记在首次运行时将始终为活动标记,但之后它将是最后打开的选项卡。< / p>