0
我編碼回片段導航和我有這個方法吧:FragmentManager的方向改變行爲
private void removeFragment(Fragment fragment) {
if (activity == null) return;
activity.getSupportFragmentManager().beginTransaction()
.remove(fragment)
.commit();
}
它的工作原理精當我啓動應用程序,並做導航。但是,當我旋轉設備 - 此方法停止工作。刪除調用的方法,但片段仍保留在屏幕上。無法弄清楚原因。需要一些幫助)
方法包含它這個類 -
public final class NavigationManager implements Navigation {
private final Stack<NavigationFragment> fragments;
@Nullable
private AppCompatActivity activity;
////
public NavigationManager() {
this.fragments = new Stack<>();
}
//// NAVIGATION
@Override
public void setNavigationMechanism(AppCompatActivity activity) {
this.activity = activity;
if (fragments.size() <= 1 || activity == null) return;
fragments.get(fragments.size() - 1).onBecomeVisible();
}
@Override
public void navigateTo(NavigationFragment fragment, boolean isReplacing) {
if (isReplacing) {
removeFragment(fragments.pop());
addFragment(fragment);
}
else addFragment(fragment);
}
@Override
public void navigateBack() {
if (activity == null) return;
if (fragments.size() <= 1) {
activity.finish();
return;
}
removeFragment(fragments.pop());
fragments.get(fragments.size() - 1).onBecomeVisible();
}
@Override
public void onHardwareBackButtonClicked() {
if (activity == null) return;
if (fragments.size() <= 1) {
activity.finish();
return;
}
removeFragment(fragments.pop());
fragments.get(fragments.size() - 1).onBecomeVisible();
}
@Override
public void onAuthenticationRevoked() {
fragments.clear();
try { addFragment(new AuthenticationFragment()); }
catch (IllegalStateException e) { if (activity != null) activity.finish(); }
}
////
private void addFragment(NavigationFragment navigationFragment) {
if (activity == null) return;
activity.getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container_frame_layout, (Fragment) navigationFragment)
.commit();
fragments.add(navigationFragment);
navigationFragment.onBecomeVisible();
}
private void removeFragment(NavigationFragment navigationFragment) {
if (activity == null) return;
activity.getSupportFragmentManager().beginTransaction()
.remove((Fragment) navigationFragment)
.commit();
activity.findViewById(R.id.fragment_container_frame_layout).invalidate();
}
}
方法停止工作或應用程序? – arcticwhite
在你旋轉屏幕的情況下,活動對象是否爲空? – Dinash
您是否正在設置活動的配置更改?在你的清單中? – Ricardo