Android:在Activity完成后返回特定片段

时间:2014-04-07 16:20:03

标签: android android-fragments android-lifecycle

我有一个FragmentActivity,我目前正在使用片段功能通过片段支持管理器隐藏和显示。这样我就可以更快地进行片段切换,因为无论如何我都需要加载所有页面。

然后我调用另一个活动,在完成它之后使用它的.finish()方法来阻止它。我希望我的观点能够回到我以前的片段。然而,它总是在创建/显示的第一个片段中打开。

示例:

Fragments[] frags = new Fragments[SIZE]
fragOne.show();
fragTwo.hide();

点击按钮:

fragOne.hide();
fragTwo.show();

然后执行另一个操作来为新活动加注星标:

new Intent();
startActivity(//Code to start activity);

活动结束:

this.finish();

在我之前的活动中,我尝试显示前一个片段“

onResume(){
  showFragment(CACHED_FRAGMENT);
}

然而,即使在调试并注意到cached_fragment确实是我的第二个片段之后,只会显示第一个片段。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

我对你在这里想要完成的事情感到有点困惑,但是下面的代码可能对你有帮助。

在Activity中,如果在Activity的onCreate()方法中savedInstanceState为null,则加载第一个Fragment。这将确保在方向更改时不会再次创建第一个片段。

if(savedInstanceState == null) {

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.content_frame, new FragmentOne());
    fragmentTransaction.commit(); 

}

上述方法会将您的第一个片段加载到您在“活动”布局中的内容框架中。

如果要显示第二个片段,请使用以下方法

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.content_frame, new FragmentTwo());
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit(); 

上面的方法将用你的第二个片段替换你的第一个片段,并将第二个片段添加到后栈。将第二个片段添加到后台堆栈可确保后退按钮将从FragmentTwo导航到FragmentOne,而不是在第一个Activity中关闭应用程序。

当您通过Intent调用第二个Activity时,请不要在第一个Activity上调用finish()。

答案 1 :(得分:0)

只需在活动a的OnResume中编写片段加载代码:

Your Hole Cards: ♦Four♦ | ♣Five♣

Flop: ♣Two♣ | ♣Ace♣ | ♦Two♦

Turn: ♣Two♣ | ♣Ace♣ | ♦Two♦ | ♠Seven♠

River: ♣Two♣ | ♣Ace♣ | ♦Two♦ | ♠Seven♠ | ♠Ace♠