片段addToBackStack关闭App

时间:2013-09-23 16:04:54

标签: android fragment back-stack

我找不到解决问题的方法。

我有几个片段(动态创建),但我的后退按钮根本不起作用, 按下它将关闭应用程序,无论片段是“活动”。

@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应该不管怎么做?

4 个答案:

答案 0 :(得分:5)

经过很长一段时间,这是我最后的代码:

@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中使用它并添加了一个双标签来最终关闭App。

答案 1 :(得分:4)

我想在支持库getFragmentManager()中使用getSupportFragmentManager()代替支持库FragmentActivity时会出现问题。例如,当您想要PreferenceFragmentsetSupportActionBar()时。

我已通过ActionBarActivity的{​​{1}}实施复制粘贴onBackPressed()来解决android.app.Activity中的问题,并进行了一些更改:

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

答案 2 :(得分:0)

我的代码从FragmentActivity更改为Activity。

编辑:输入错误

答案 3 :(得分:0)

按“后退”按钮退出应用程序

my_dict=dict()
my_dict['season']=['spring','summer','fall']
my_dict['sport']=['baseball','soccer']
name='bobs-_season_-_sport_'

def generate_all_replaced(name, d):
    names = [name]
    for k in d.keys():
        names = [n.replace(f'_{k}_', v) for v in d[k] for n in names]
    return names


print(generate_all_replaced(name, my_dict))