我有一个简单的问题。我的问题是我有两个活动:
在活动A中,我显示4-5个片段。这是主要活动(导航抽屉)所以我在其中显示4-5个片段。
从所有片段重定向到活动B.
但是当我从活动B回来时,我想显示最后打开的片段。
现在它直接打开第一个片段,这是默认的。我想在用户返回第一个活动时打开最后打开的片段。
请帮我...
您可以在活动A中使用onSaveInstanceState
来保存有关上次打开的片段和onRestoreInstanceState
/ onCreate
的信息以恢复此信息。例如:
private static final String LAST_OPENED_FRAGMENT_REF = "LAST_OPENED_FRAGMENT_REF";
private static final int HOME_FRAGMENT = 0;
private static final int OTHER_FRAGMENT = 1;
private int currentOpenedFragment = HOME_FRAGMENT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
if (savedInstanceState != null) {
currentOpenedFragment = savedInstanceState.getInt(LAST_OPENED_FRAGMENT_REF);
}
if (navigationView != null) {
Fragment fragment = initFragmentByType(currentOpenedFragment);
getSupportFragmentManager()
.beginTransaction()
.add(R.id.fragment_container, fragment)
.commit();
setupDrawerContent(navigationView);
}
...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(LAST_OPENED_FRAGMENT_REF, currentOpenedFragment);
}
private Fragment initFragmentByType(int type) {
switch(type) {
case HOME_FRAGMENT: return new Home();
case OTHER_FRAGMENT: return new Other();
default: throw new IllegalArgumentException("There is no type: " + type);
}
}
并且不要忘记在currentOpenedFragment
回调中更新onNavigationItemSelected
字段。
如果您的第一个活动随第二个活动而改变,那么前一个活动的碎片将因活动生命周期而自行销毁。
您应该使用startActivity
打开第一个活动,并在它进入字母活动之前存储最后一个活动片段。
调用第二个活动时不使用完成。对于exp:`
Intent i = new Intent(getApplicationContext(), ActivityB.class);
startActivity(i);
//finish(); `