听取片段中按下的“后退”键

时间:2013-06-23 18:07:33

标签: java android

我使用Fragment让用户在我的Android应用程序中输入信息。如果输入了信息,我希望在按下“后退”键时向用户发送警告。如果他确认他要放弃更改,则必须弹出Fragment。如果他取消放弃,Fragment应保持不变。

我已尝试使用onKeyListener回调函数向Fragment实施onKey。但它永远不会被执行。

我该怎么办?

2 个答案:

答案 0 :(得分:8)

尝试这样的事情。 (我无法测试这个)

在您的活动中,覆盖onBackPressed()

@Override
public void onBackPressed() {       
    Fragment frag = getSupportFragmentManager().findFragmentById(R.id.your_container);

    if(frag instanceof TheFragmentYouAreTalkingAbout) {
        ((TheFragmentYouAreTalkingAbout)frag).showConfirmGoBackDialog();
    } else {
        super.onBackPressed();
    }
}

showConfirmGoBackDialog()方法应该创建一个对话框。在此对话框中,您可以在确认/确定按钮上放置一个监听器,如果按下该按钮将调用getFragmentManager().popBackStack();,否则不执行任何操作。

答案 1 :(得分:0)

我不想使用instanceof比较。

所以我的解决方案是在提交片段事务时提供标记。然后你可以找到逐个标签的片段:

private void showMyFragment(){
    Fragment fragment = new MyFragment();
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.container, fragment, MY_FRAGMENT_TAG);
    ft.commit();
}

@Override
public void onBackPressed() {
    MyFragment fragment = (MyFragment)findFragmentByTag(MY_FRAGMENT_TAG);

    if (fragment != null) {
        fragment.showConfirmation
    } else {
        super.onBackPressed();
    }
}