我有一个包含多个活动的应用,每个活动可能会使用多个片段。
一个活动(称为IBAsTabsActivity)扩展了SherlockFragmentActivity,我正在使用一些示例代码,其中根据选择的选项卡加载不同的片段。其中一个可能的片段称为“SearchableListFragment”。这一切都很好。我有一个带有两个按钮的“home”活动,一个带我去IBAsTabsActivity,另一个把我带到AnAlternativeActivity。如果我按下按钮将我带到IBAsTabsActivity并查看几个标签 - 那么如果我按下后退按钮,我会直接跳到“家”。
现在我想让AnAlternativeActivity启动并运行。它没有标签,因此不使用任何Sherlock代码。相反,我有这个:
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_holding_layout内)及其内容。但现在,如果单击后退按钮,fragment_holding_layout中的片段将消失,但仍会运行AnAlternativeActivity。我必须再次按下后退按钮才能退出AnAlternativeActivity并返回我的家庭活动。
我可能会编写一些丑陋的代码来解决这个问题 - 但我怀疑有一种标准的方法可以应对这种情况。有什么想法吗?
答案 0 :(得分:2)
您应该能够使用父活动的概念来轻松解决此问题。您需要做的就是告诉Android HomeActivity
是您AnAlternativeActivity
的父级,导航将由您处理。在AndroidManifest.xml
文件中为android:parentActivityName
添加AnAlternativeActivity
属性,如下所示:
<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>
您需要新设备的常规属性和旧设备的元数据标记。可以在此处找到更多信息:http://developer.android.com/training/basics/firstapp/starting-activity.html(查看将其添加到清单子标题下)。
答案 1 :(得分:0)
在AnAlternativeActivity的onPause中,您可以调用finish()
来结束它。
public void onPause() {
super.onPause();
finish();
}
答案 2 :(得分:0)
您对ft.addToBackStack("replacingFragmentA");
的来电似乎是需要两次点击“返回”的原因。将事务添加到后台堆栈会产生这种影响:在历史堆栈中添加一个层。
因此,当您第一次“撤消”交易时,按“返回”可以说,并将SearchableListFragment
替换为R.id.fragment_holding_layout
。第二次按“返回”将从AnAlternativeActivity
移回“主页”活动。