2013-09-23 31 views
1

我沒有找到任何解決方案,我的問題。片段addToBackStack關閉應用程序

我有幾個片段(動態創建),但我的後退按鈕根本不工作,按下它將關閉應用程序,無論片段是「活動」。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
// TODO Auto-generated method stub 
switch (item.getItemId()) { 

case R.id.itemAdd: 
FragmentTransaction tx = getFragmentManager().beginTransaction(); 
    Fragment fragment = new NeuesProduktFrag(); 

    tx.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right, 
      R.anim.slide_in_left, R.anim.slide_out_right); 
    tx.replace(R.id.main, fragment); 
    tx.addToBackStack(null); 
    tx.commit(); 
    return true; 

一切工作正常,但進入「NeuesProduktFrag」片段並按下後退按鈕我的應用程序關閉後。嘗試在不同的按鈕等 覆蓋onBackPressed是不是需要正確的? addToBackStack應該做的伎倆?

+1

addToBackStack可能無關的問題,問題可能是你的片段的的onResume。看看堆棧跟蹤並找出問題所在。如果你也在這裏發佈它可能會有所幫助 – tyczj

回答

5

後我struggeled很長一段時間,這是我的最終代碼:

@Override 
public void onBackPressed() { 

// initialize variables 
FragmentManager fm = getFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 

// check to see if stack is empty 
if (fm.getBackStackEntryCount() > 0) {   
    fm.popBackStack(); 
    ft.commit();  
} 
else { 
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) { 
Toast.makeText(this, "Nochmal drücken zum Beenden!", 4000).show(); 
this.lastBackPressTime = System.currentTimeMillis(); 
} else{ 
     super.onBackPressed(); 
    }   
} 
} 

我用它在我的FragmentActivity並增加了雙標籤,最後關閉應用程序。

0

我的代碼工作從FragmentActivity更改爲活動。

編輯:打字錯誤

+0

嗯,我沒有使用FrameActivity,我用FragmentActivity持有靜態片段來顯示:) – Markus

4

我想使用時出現問題getFragmentManager(),而不是支持庫的getSupportFragmentManager()支持圖書館的FragmentActivity。例如,當你想要PreferenceFragmentsetSupportActionBar()在一起。

我已經通過複製粘貼onBackPressed()實現從android.app.Activity解決了這個問題,在我的ActionBarActivity有了一些變化:

@Override 
public void onBackPressed() { 
    if (getFragmentManager().popBackStackImmediate()) return; 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) 
     finish(); 
    else 
     finishAfterTransition(); 
}