我有三個片段:刪除片段問題
A是我的主要片段,B是登錄片段,成功登錄後會進入C片段。
當我點擊後退按鈕,我需要從片段下移到片段A
我的問題是,當我點擊後退按鈕我仍然片段B-片段從A.
移動我該如何解決我的問題?
這是我的開關片段功能:
public void switchFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
transaction.addToBackStack(null);
transaction.commit();
}
片段(NewHomepage)到B(LoginFragment)片段:
switchFragment(LogInFragment.newInstance());
這是我的乙片段,它具有值logged
來決定當它來自C片段時,是否切換片段。
我認爲這個問題一定是在這裏,當回到A片段並點擊返回按鈕想要退出APP時,我可以看到logcat show 1 =>和2 =>。
String logged = memberData.getUD_MBTYPENAME(); //get the value when login succeed
Log.d(TAG,"1=>"+logged);
//If UD_MBTYPENAME is not null,change to A fragment
if (!TextUtils.isEmpty(logged)) {
Log.d(TAG,"2=>"+logged);
((MainActivity) getActivity()).switchFragment(NewHomepage.newInstance());
}
這裏是我的約onKeyDown和switchFragment MainActivity:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
quickDialog();//It's a alert dialog
return false;
}
}
return super.onKeyDown(keyCode, event);
}
public void switchFragment(Fragment fragment) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
transaction.addToBackStack(null);
transaction.commit();
}
以參考改變這樣的代碼,如果我不使用transaction.addToBackStack(null);
,這個問題仍然存在,即使刪除transaction.addToBackStack(null);
當我回到A時,我必須點擊兩次以顯示警報對話框,我不知道當我在A片段中第一次點擊時發生了什麼。
if (!TextUtils.isEmpty(logged)){
Log.d(TAG,"2=>"+logged);
hideFragment(LogInFragment.newInstance());
switchFragment(NewHomepage.newInstance());
}
public void switchFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.mainFrame, fragment, null);
//remove it will fix my issue , but I have to click back twice to show alert dialog , I don't know what happened click it first time in A fragment.
//transaction.addToBackStack(null);
transaction.commit();
}
public void hideFragment(Fragment fragment) {
FragmentManager manager = getActivity().getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.hide(fragment);
transaction.commit();
}
刪除hideFragment
和使用上switchFragment manager.popBackStack();
,這個問題將是固定的。
的可能的複製[如何刪除從Android的後退堆棧特定片段(http://stackoverflow.com/questions/31198894/how-to-delete-a-specific-fragment-from-back -stack-in-android) – Tauqir
嘿,謝謝你的幫助,我可以從你的鏈接找到答案。非常感謝你。 –