Android 调用sourcefragment';当硬件在目标片段中被按下时,s onactivity结果

Android 调用sourcefragment';当硬件在目标片段中被按下时,s onactivity结果,android,android-fragments,onbackpressed,Android,Android Fragments,Onbackpressed,当在目标片段类中使用hardware back按钮时,我试图从目标片段调用源片段onActivityResult()。在下面提到的代码中获取NPE 请分享一些建议 // target fragment public void backButtonWasPressed() { Intent intent = new Intent(); // NPE occurs in the below line getTargetFragment().onActivityResult(

当在目标片段类中使用hardware back按钮时,我试图从目标片段调用源片段onActivityResult()。在下面提到的代码中获取NPE

请分享一些建议

// target fragment
public void backButtonWasPressed() {
    Intent intent = new Intent();
    // NPE occurs in the below line 
    getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);
    getActivity().getSupportFragmentManager().popBackStack();
}

// main activity
@Override
public void onBackPressed() {       
    if (sourceFragment != null) {
            TargetFragment fragment = new TargetFragment();
            fragment.backButtonWasPressed();
    } else {
            super.onBackPressed();
            return;
    }        
}
getTargetFragment()
片段的非静态方法。看见您需要获取对要从中返回的片段的实例化的引用。最简单的方法可能是将片段作为参数传递,即

public static void backButtonWasPressed(Fragment frag)
然后打电话

frag.getTargetFragment().onActivityResult(getTargetRequestCode(), Activity.RESULT_OK, intent);

为什么这个方法是静态的?如果在不创建对象的情况下调用此方法,则getTargetFragment()将如何工作。如果方法backButtonWasPressed()变为非静态,则需要安装fragment类以从主活动调用此方法。当我这样做的时候,我在调用方法中得到了NPE,我让它工作了。我将代码更改为在工具栏中有一个后退按钮(imageview),当按下硬件后退按钮时,我触发了backbutton.performclick()。添加buttonclicklistener()并在buttonclicklistener块中添加代码
Intent Intent=new Intent();getTargetFragment().onActivityResult(getTargetRequestCode(),Activity.RESULT\u OK,intent);getActivity().getSupportFragmentManager().popBackStack()我收到了这个错误。java.lang.NullPointerException:尝试调用空对象引用上的虚拟方法“void android.support.v4.app.Fragment.onActivityResult(int,int,android.content.Intent)”
getTargetFragment()
可能返回null。这是一个不同但相关的问题。看,我让它工作了。我将代码更改为在工具栏中有一个后退按钮(imageview),当按下硬件后退按钮时,我触发了backbutton.performclick()。添加buttonclicklistener()并在buttonclicklistener块中添加代码
Intent Intent=new Intent();getTargetFragment().onActivityResult(getTargetRequestCode(),Activity.RESULT\u OK,intent);getActivity().getSupportFragmentManager().popBackStack()