Java 保存碎片以免被破坏或隐藏,并更改徽章编号
我有一个主要活动,当我改变方向时,我加载了两个片段,当前片段被销毁,默认片段被加载,我还想从片段中更改徽章编号,但我不知道如何做。请帮我保存碎片的状态Java 保存碎片以免被破坏或隐藏,并更改徽章编号,java,android,mysql,android-volley,Java,Android,Mysql,Android Volley,我有一个主要活动,当我改变方向时,我加载了两个片段,当前片段被销毁,默认片段被加载,我还想从片段中更改徽章编号,但我不知道如何做。请帮我保存碎片的状态 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar; toolbar = (T
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar;
toolbar = (Toolbar) findViewById(R.id.my_nav_bar);
toolbar.setTitleTextColor(getResources().getColor(R.color.text_white));
setSupportActionBar(toolbar);
navigationView = findViewById(R.id.mynavigation);
drawerLayout = findViewById(R.id.mydrawer);
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.open, R.string.close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
bottomNavigationView = findViewById(R.id.my_bottom_menu);
badgeDrawable = bottomNavigationView.getOrCreateBadge(R.id.cart);
badgeDrawable.setNumber(cartitems);
bottomNavigationView.setSelectedItemId(R.id.home);
fragmentManager.beginTransaction().replace(R.id.mycontainer, new home()).commit();
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.home:
fragmentManager.beginTransaction().replace(R.id.mycontainer, new home()).addToBackStack(null).commit();
break;
case R.id.order:
fragmentManager.beginTransaction().replace(R.id.mycontainer, new order()).addToBackStack(null).commit();
break;
case R.id.cart:
fragmentManager.beginTransaction().replace(R.id.mycontainer, new Cart()).addToBackStack(null).commit();
break;
}
return true;
}
});
}根据:
请注意,片段事务仅在savedInstanceState
为null
时创建。这是为了确保在首次创建活动时只添加一次片段。当发生配置更改并重新创建活动时,savedInstanceState
不再为null
,并且不需要再次添加片段,因为片段将从savedInstanceState
自动还原
因此,如果(savedInstanceState==null),则需要在中包装设置初始状态的所有调用:
请注意,同一指南还解释了如何执行此操作,它可以为您执行相同的操作,并允许您将beginTransaction
从onCreate()
中完全删除:
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mycontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name=".home" />
谢谢@ianhanniballake。它起作用了
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mycontainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name=".home" />