转换活动

时间:2017-02-14 22:53:45

标签: android android-intent android-activity

我一直在研究我的问题的解决方案,但没有一个结果解决了我的问题。

我有五个Java活动。每个活动有五个按钮,其中四个是其他活动,另一个是自身。它基本上只是页面底部的一个底部条。

我的问题是,让我说我在一个活动中,然后再次点击该按钮进入活动,它会打开并加载一个全新的活动。然后当我点击它时,它会在我离开时显示之前的活动。但如果我按十次,我需要再点击十次。此外,如果我在每个活动之间切换两次,并且我想点击返回主要退出,我需要点击十次而不是五次。

我希望它是这样的,当我点击一个按钮时,它会打开活动。如果我再次按下该按钮,如果我参与该活动,则无效。如果我在活动之间切换并且我压制了我已经打开的活动,我希望将其从较低的位置带到堆栈的顶部,而不是添加。所以最多,我只想要运行五个活动。 这是一个非常令人困惑的问题,因为我看到人们建议使用意图标志,我不确定我是否将它们放在清单中,这对我没有做任何尝试。而且我已经看到人们建议使用LaunchMode单一实例,它也什么都不做。

1 个答案:

答案 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();

    }
    // ...
}