Android 在片段中按下后退按钮时离开活动

Android 在片段中按下后退按钮时离开活动,android,Android,我有一个包含多个活动的应用程序,每个活动都可能使用多个片段 一个活动(称为IBAsTabsActivity)扩展了SherlockFragmentActivity,我正在使用一些示例代码,其中根据选择的选项卡加载不同的片段。其中一个可能的片段称为“SearchableListFragment”。这一切都很好。我有一个“主页”活动,有两个按钮,一个带我去IBAsTabsActivity,另一个带我去AnalInternativeActivity。如果我按下按钮将我带到IBAsTabsActivit

我有一个包含多个活动的应用程序,每个活动都可能使用多个片段

一个活动(称为IBAsTabsActivity)扩展了SherlockFragmentActivity,我正在使用一些示例代码,其中根据选择的选项卡加载不同的片段。其中一个可能的片段称为“SearchableListFragment”。这一切都很好。我有一个“主页”活动,有两个按钮,一个带我去IBAsTabsActivity,另一个带我去AnalInternativeActivity。如果我按下按钮将我带到IBAsTabsActivity并查看几个选项卡,那么如果我按下后退按钮,我将直接跳到“主页”

现在我想让AnalInternativeActivity启动并运行。它没有标签,因此不使用任何夏洛克密码。相反,我有:

public class AnAlternativeActivity extends FragmentActivity implements OnClickListener
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.blank_fragment_holder);

        FragmentManager fm = getSupportFragmentManager();
        FragmentTransaction ft = fm.beginTransaction();
        SearchableListFragment fb = new SearchableListFragment();
        ft.replace(R.id.fragment_holding_layout, fb);
        ft.addToBackStack("replacingFragmentA");
        ft.commit();
}
这一切都很好,就像我单击主屏幕上的按钮调用AnAlternativeActivity一样,然后我可以正确地看到SearchableListFragment()(位于fragment\u holding\u布局内)及其内容。但是现在,如果我单击后退按钮,fragment_中的片段会消失,但会让AnternativeActivity仍在运行。我必须再次按下“后退”按钮才能退出可选活动并返回我的家庭活动


我可能会编造一些难看的代码来解决这个问题,但我怀疑有一个标准的方法来处理这个场景。有什么想法吗?

在AnAlternativeActivity的onPause中,您可以调用
finish()
来结束它

public void onPause() {
    super.onPause();
    finish();
}

您应该能够使用父活动的概念来轻松解决这个问题。你所需要做的就是告诉Android,
HomeActivity
是你的
AnternativeActivity
的父项,导航将由你来处理。在
AndroidManifest.xml
文件中,为
AnAlternativeActivity
添加
android:parentActivityName
属性,如下所示:

<activity
    android:name="com.mick.AnAlternativeActivity"
    android:label="@string/activity_title"
    android:parentActivityName="com.mick.HomeActivity" >
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.mick.HomeActivity" />
</activity>

(查看将其添加到舱单子目下)。

您对
ft.addToBackStack(“replacingFragmentA”)的调用似乎是需要点击“后退”两次的原因。将事务添加到后堆栈将产生这样的效果:在历史堆栈中添加一个层


因此,当您第一次按“上一步”时,可以说该事务将被“撤消”,并将您的
SearchableListFragment
替换为
R.id.fragment\u布局
。第二次按“上一步”时,将从
AnAlternativeActivity
返回到您的“主页”活动。

your fragment.getActivity如果需要,请调用backpressedyourself@Marko拉齐奇:你能详细说明一下吗?cod3-monk-3y有一个正确的观点。但是如果电话铃响,编译器抱怨android:parentActivityName,但接受了元数据。然后在运行时它没有任何区别。您是在更新的API上运行它吗?它可能被忽视了。此外,请查看此链接,它显示了正确导航的所有代码: