如何在Fragment中使用onBackPress

时间:2017-09-14 12:56:04

标签: android android-fragments fragmentmanager

在我的应用程序中,我使用ViewPager在活动中显示两个片段。 在其中一个片段中,我使用NavigationDrawer。我想点击 onBackPress 关闭此NavigationDrawer

我在下面写了打开这个抽屉的代码:

reviewSerialFrag_DrawerLayout.openDrawer(Gravity.END);

我希望当我点击onBackPress时,它将使用以下代码关闭此抽屉:

reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);

提问者,请提出当前的问题,

5 个答案:

答案 0 :(得分:1)

onBackpress()仅在片段中调用,如果您需要在片段中按回事件,则必须实施接口才能获得onBackPress()回调。

活动:

public MyActivity extends AppCompatActivity{

private BackPressListener backPressListener;

    @Override
    public void onBackPressed() {
        if (backPressListener != null) {
            backPressListener.onActivityBackPress();
        } else {
            super.onBackPressed();
        }
    }

    public void setBackPressListener(BackPressListener backPressListener) {
        this.backPressListener = backPressListener;
    }

    public interface BackPressListener{
        void onActivityBackPress();
    }

}

在片段中:

public class MyFragment extends Fragment implements BackPressListener{

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ((MyActivity)getActivity()).setBackPressListener(this);
    }

    @Override
    public void onActivityBackPress() {
        // handle your back press here.

       reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);

       getActivity().onBackPressed();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        ((MyActivity)getActivity()).setBackPressListener(null);
    }
}

答案 1 :(得分:1)

我的解决方案:
创建BaseFragment.java:

mock_serial.return_value.read.return_value = 'hello'

然后通过此BaseFragment扩展您的片段,并在活动中

public class BaseFragment extends Fragment
    {
        public boolean onBackPressed()
        {
             return false;
        }
    }

yourFragment

@Override
public void onBackPressed()
{
    if (!yourFragment.onBackPressed())
        super.onBackPressed();
}

答案 2 :(得分:1)

根据AndroidX release notesandroidx.activity 1.0.0-alpha01被发布并引入了ComponentActivity,它是现有FragmentActivityAppCompatActivity的新基类。此版本为我们带来了一个新功能:

您现在可以通过OnBackPressedCallback注册addOnBackPressedCallback来接收onBackPressed()回调,而无需在活动中覆盖该方法。

答案 3 :(得分:0)

最好的解决方案是创建您的界面,并在Fragment中实现。

解决方案here : implement onBackpress in Fragment

int num;
if (scanf("%d", &num)==1) { // successfully read one valid integral value?
    printf("you entered number %d:", num);
}

请参阅链接了解更多详情...... easy sample

答案 4 :(得分:0)

您可以保留抽屉打开的标志。当你覆盖onBackPressed()时,检查这个标志,如果是,则调用

reviewSerialFrag_DrawerLayout.closeDrawer(Gravity.END);

否则,请调用super.onBackPressed()或您需要的任何其他逻辑。