2013-09-23 32 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(); 
}