我正在开发一些应用程序,但我遇到了一个问题。
我有: 1. FrameLayout中带有ListFragment的活动A(导航抽屉图案): XML:
<FrameLayout
...>
</FrameLayout>
<LinearLayout
...>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
如何通过保存ListFragment的UI,从活动B返回(使用导航按钮)到活动A(如果我使用Home Back返回,则重新创建活动)。 顺便说一句,如果我按下手机上的后退按钮,活动就不会重新创建并返回之前的状态。
答案 0 :(得分:11)
使用“向上”导航时,将重新创建上一个活动。为了防止在保留UP导航时发生这种情况,您可以获取父活动的意图,如果存在则将其置于前面,否则创建它。否则就创建它。
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
Intent parentIntent = NavUtils.getParentActivityIntent(this);
parentIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(parentIntent);
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
我还在Manifest中指定了launchMode="singleTop"
。但我不确定是否有必要。
答案 1 :(得分:0)
您可以做的一件事是阻止第一个活动重新创建,只需在按下该按钮时调用第二个活动上的finish()
。
未经过测试,但我认为该ID为android.R.id.home
,因此您只需在第二项活动中覆盖onOptionsItemSelected
,如下所示:
/**
* Handles the selection of a MenuItem.
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}