我一直在研究我的问题的解决方案,但没有一个结果解决了我的问题。
我有五个Java活动。每个活动有五个按钮,其中四个是其他活动,另一个是自身。它基本上只是页面底部的一个底部条。
我的问题是,让我说我在一个活动中,然后再次点击该按钮进入活动,它会打开并加载一个全新的活动。然后当我点击它时,它会在我离开时显示之前的活动。但如果我按十次,我需要再点击十次。此外,如果我在每个活动之间切换两次,并且我想点击返回主要退出,我需要点击十次而不是五次。
我希望它是这样的,当我点击一个按钮时,它会打开活动。如果我再次按下该按钮,如果我参与该活动,则无效。如果我在活动之间切换并且我压制了我已经打开的活动,我希望将其从较低的位置带到堆栈的顶部,而不是添加。所以最多,我只想要运行五个活动。 这是一个非常令人困惑的问题,因为我看到人们建议使用意图标志,我不确定我是否将它们放在清单中,这对我没有做任何尝试。而且我已经看到人们建议使用LaunchMode单一实例,它也什么都不做。
答案 0 :(得分:2)
我认为片段是最好的方法。是的,它有点棘手但你可以在片段中使用片段。为了在不创建额外实例的情况下进行导航,我认为您可能正在寻找类似的内容:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if(id == R.id.nav_home){
Fragment newFragment;
FragmentManager fragmentManager = getSupportFragmentManager();
// Look for fragment by tag
Fragment foundFragment = fragmentManager.findFragmentByTag(MAIN_FRAGMENT);
if(foundFragment != null) { //if fragment's already in the backstack
newFragment = foundFragment; //replace fragment with backstack fragment
}else{
newFragment = new MainFragment(); // use a new fragment instance
}
// Add new fragment instance to fragment manager
fragmentManager.beginTransaction()
.replace(R.id.fragment_container, newFragment, MAIN_FRAGMENT)
.addToBackStack(MAIN_FRAGMENT)
.commit();
}
// ...
}