要替换片段,我使用这样的辅助方法:(我保留了后台堆栈,但每个片段类只有 1 个)
@Override
public void replaceCurrentFragment(Fragment fragment, String newTag) {
invalidateOptionsMenu();
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(newTag) == null) {
//fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.flContainer, fragment, newTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}
}
我这样称呼它
replaceCurrentFragment(new MenuFragment(), "yourTag");
你可以在你的 switch 和你的初始中使用这个方法,你的代码将如下所示:
public class SwitchActivity extends AppCompatActivity {
Switch swCheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch);
swCheck = findViewById(R.id.switch_check);
swCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (isChecked) {
replaceCurrentFragment(new NewsFragment(), "yourTag");
} else {
replaceCurrentFragment(new BoardFragment(), "yourTag2");
}
}
});
//to set the initial fragment, just use the replace again here in the oncreate:
replaceCurrentFragment(new NewsFragment(), "yourTag");
}
@Override
public void replaceCurrentFragment(Fragment fragment, String newTag) {
invalidateOptionsMenu();
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);
if (!fragmentPopped && manager.findFragmentByTag(newTag) == null) {
//fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content, fragment, newTag);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(backStateName);
ft.commit();
}
}
}
如果您不想使用该方法
public class SwitchActivity extends AppCompatActivity {
Switch swCheck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_switch);
swCheck = findViewById(R.id.switch_check);
swCheck.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (isChecked) {
transaction.replace(R.id.content, new NewsFragment()).commit();
} else {
transaction.replace(R.id.content, new BoardFragment()).commit();
}
}
});
transaction.replace(R.id.content, new BoardFragment()).commit();
}
}
希望对你有帮助