Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 碎片上的后退按钮不工作_Android - Fatal编程技术网

Android 碎片上的后退按钮不工作

Android 碎片上的后退按钮不工作,android,Android,我有一个片段活动,从这里我可以开始包含viewpager的片段。在我的片段活动中,我添加了这段代码 fragment = new ItemPagerFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(R.id.conten

我有一个片段活动,从这里我可以开始包含viewpager的片段。在我的片段活动中,我添加了这段代码

fragment = new ItemPagerFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content_frame, fragment);
transaction.addToBackStack(null);
transaction.commit();
现在,当我按下后退按钮时,只会出现一个空白屏幕,它不会引导我进入片段活动。 我可能做错了什么?

试试这个方法

                   // Create new fragment and transaction
                    Fragment newFragment = new ItemPagerFragment();
                    // consider using Java coding conventions (upper first char class names!!!)
                    FragmentTransaction transaction = getFragmentManager().beginTransaction();
                    // Replace whatever is in the fragment_container view with this fragment,
                    // and add the transaction to the back stack
                    transaction.replace(R.id.content_frame, newFragment);
                    transaction.addToBackStack(null);
                    // Commit the transaction
                    transaction.commit();
修改您的代码

    @Override
public void onBackPressed() {
    if(some condition) {
        // do something
    } else {
        super.onBackPressed();
    }
}
请点击此链接

您必须告诉片段管理器已按下后退按钮。在您的
活动上覆盖
onBackPressed

@Override
public void onBackPressed() {
   if (getFragmentManager().getBackStackEntryCount() == 0) {
      super.onBackPressed();      
   } else {
      getFragmentManager().popBackStack();
   }
}

在保存片段的活动中使用此选项

@Override
public void onBackPressed() {
    if (fragmentManager.getBackStackEntryCount() > 1) {
        fragmentManager.popBackStack();
    } else
        finish();
}

启动片段时,为每个片段分配一个标记。如果要返回,请按使用分配的标记名检查片段是否存在,然后执行相应的操作。例如:

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";
//when want to add fragment to view
private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}
//in activity back pressed check the existence of fragment by TAG
@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
private final static String TAG_FRAGMENT = "TAG_FRAGMENT";
//when want to add fragment to view
private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}
//in activity back pressed check the existence of fragment by TAG
@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) { // and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}