Java 听一听",;“后退”;按入碎片的键

Java 听一听",;“后退”;按入碎片的键,java,android,Java,Android,我使用片段让用户在我的Android应用程序中输入信息。如果输入了信息,我希望在用户按下“后退”键时向用户发送警告。如果他确认要放弃更改,则必须弹出片段。如果他取消放弃,片段应保持原样 我已经尝试使用onKey回调函数将onkeylister实现到我的Fragment。但它从未被执行过 我该怎么办?试试这样的东西。(我还没能测试这个) 在您的活动中,覆盖onBackPressed(): @覆盖 public void onBackPressed(){ Fragment frag=getSuppo

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

我已经尝试使用
onKey
回调函数将
onkeylister
实现到我的
Fragment
。但它从未被执行过

我该怎么办?

试试这样的东西。(我还没能测试这个)

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

@覆盖
public void onBackPressed(){
Fragment frag=getSupportFragmentManager().findFragmentById(R.id.your_容器);
如果(您所谈论的片段的片段实例){
((您正在谈论的片段)frag.showConfirmGoBackDialog();
}否则{
super.onBackPressed();
}
}

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

我不希望使用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();
    }
}

您还可以将此代码放入片段中,因为该片段具有相同的覆盖,然后您就知道您位于正确的片段中。