私は1つのホストアクティビティと2つのフラグメントを持っています。アクティビティにOnBackStackChangeListener
を実装して、アクションバーの戻るボタンが一貫した動作を提供するようにしました。画面の向きが変わると、アクティビティが破棄されて再作成されますが、onConfigurationChanged
をオーバーライドしないと、オーエメントの変更の結果として重複するフラグメントがバックスタックに追加されないようにする方法はありますか?なぜなら、後ろのボタンは、重複した断片を通ってページするからです。画面の向きが変化したときに重なり合ったフラグメントがバックスタックに追加されないようにする方法
MyActivity:
public class DepartmentListActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
overridePendingTransition(0, 0);
setContentView(R.layout.activity_department_list);
getSupportFragmentManager().addOnBackStackChangedListener(this);
DepartmentListFragment fragment = DepartmentListFragment.newInstance();
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.department_list_container, fragment)
.addToBackStack("list")
.commit();
shouldDisplayHomeUp();
}
@Override
public void onBackStackChanged() {
shouldDisplayHomeUp();
}
public void shouldDisplayHomeUp(){
//Enable Up button only if there are entries in the back stack
boolean canback = getSupportFragmentManager().getBackStackEntryCount()>0;
getSupportActionBar().setDisplayHomeAsUpEnabled(canback);
}
@Override
public boolean onSupportNavigateUp() {
//This method is called when the up button is pressed. Just the pop back stack.
if(getSupportFragmentManager().getBackStackEntryCount()>1){
getSupportFragmentManager().popBackStack();
}else{
startActivity(new Intent(this, MainMenuActivity.class));
}
return true;
}
}
がFromListAdapter:
Fragment fragment = DepartmentOverviewFragment.newInstance();
((DepartmentListActivity) context).
getSupportFragmentManager().
beginTransaction().
replace(R.id.department_list_container, fragment).addToBackStack("overview").commit();
BaseAdapterのフラグメントを切り替えるので、savedInstanceStateを確認できません – BiGGZ