2

我使用 aFragment让用户在我的 Android 应用程序中输入信息。如果已输入信息,我希望在用户按下“返回”键时向用户发送警告。如果他确认他想放弃更改,则Fragment必须弹出。如果他取消放弃,Fragment应该保持原样。

我已经尝试使用回调函数来实现onKeyListener我的。但它永远不会被执行。FragmentonKey

我能怎么做?

4

2 回答 2

10

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

在您的活动中,覆盖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();如果按下该按钮就会调用,否则什么也不做。

于 2013-06-23T18:17:25.167 回答
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();
    }
}
于 2013-06-23T18:45:47.477 回答