NSo*_*uth 5 android android-fragments fragmentmanager
当用户选择导航抽屉中的项目时,我的应用程序将启动一个处理程序,在等待抽屉关闭后,调用代码来替换主Activity中的片段.但是,如果设备在延迟期间已经旋转,我会收到IllegalStateException.
我已经阅读了这篇关于片段事务和生命周期的精彩文章,但我不知道如何在我的代码中处理这个问题.我明白我之后不应该尝试提交交易onSaveInstanceState().但我怎么知道是否onSaveInstanceState()被召唤?我想做这样的事情.
navView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(final MenuItem menuItem) {
// close drawers
drawerLayout.closeDrawers();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
goTo(menuItem); // swap in Fragment specified by menuItem
}
}, 300);
return true;
}
});
...
private void goTo(menuItem) {
if( alreadyCalledOnSaveInstanceState() { // THIS
return;
}
switch (item.getItemId()) {
case R.id.item1:
frag = new Fragment_Grade_Calculator();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_up, R.anim.zoom_exit).replace(R.id.main_frag_container, frag)
.commit();
return true;
}
Run Code Online (Sandbox Code Playgroud)
但我不知道相当于我的化妆品alreadyCalledOnSaveInstanceState().
我认为你不应该使用onSaveInstanceState(),而应该使用onStop()。并且在调用 onStop() 后不要提交事务。并且不要忘记允许在调用 onStart() 后提交事务。
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |