繁体   English   中英

为什么我没有从onActivityResult收到任何结果

[英]Why I'm not receiving any results from onActivityResult

我是通过在按下按钮时调用showPickImageDialog()方法从AddFragment启动DialogFragment的 AlertDialogFragment onActivityResult中,我将结果发送回AddFragment,但是AddFragment没有收到任何结果。 有什么想法吗?

AddFragment:

    public class AddFragment extends Fragment {

    private static final int REQUEST_IMAGE = 3;
    private static final String DIALOG_IMAGE = "image";
    private static final String TAG = "TAG";

    void showPickImageDialog() {
        FragmentManager fm = getActivity()
                .getSupportFragmentManager();
        AlertDialogFragment pdialog = new AlertDialogFragment();
        pdialog.setTargetFragment(this, REQUEST_IMAGE);
        pdialog.show(fm, DIALOG_IMAGE);
    }



    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);


            if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){

                Log.e(TAG,"back in AddFragment");

            }
        }
}

在AlertDialogFragment中,我从onActivityResult方法调用sendResult方法。 调用SendResult方法,我用Logs检查了它

AlertDialogFragment:

public class AlertDialogFragment extends DialogFragment {

private final static String TAG = "Cload";
public static final String EXTRA_PHOTOFILENAME =
        "com.example.tadas.dreamcload1.image";
private static final int REQUEST_IMAGE = 3;
private String filename;
private Uri uri;


private void sendResult(int resultCode) {
    if(getTargetFragment() == null){return;}

    Intent i = new Intent();
    i.putExtra(EXTRA_PHOTOFILENAME,filename);
   getTargetFragment()
           .onActivityResult(getTargetRequestCode(), resultCode, i);

}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    //LayoutInflater inflater = getLayoutInflater();
   // View dialogLaout = inflater.inflate(R.layout.custom_dialog_pick_image,null);
    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.custom_dialog_pick_image, null);
    final AlertDialog dialog = new AlertDialog.Builder(getActivity())
            .setView(view)
            .create();
    ImageButton gallerybtn = (ImageButton)view.findViewById(R.id.gallery);
    ImageButton camerabtn = (ImageButton)view.findViewById(R.id.camera);

    gallerybtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.e(TAG,"gallery btn pressed");
            Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                  startActivityForResult(intent, REQUEST_IMAGE);
        }
    });
    camerabtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });


    return dialog;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){

    uri = data.getData();

        final String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME};
        Cursor c = getActivity().getContentResolver()
                .query(uri,filePathColumn,null,null,null);

        if (c.moveToFirst()){
            int ids = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            uri = Uri.parse(c.getString(ids));
            filename = uri.toString();
            c.close();
        }
        sendResult(Activity.RESULT_OK);
        dismiss();
    }

}

您可以在Activity覆盖onActivityResult方法,并手动调用Fragment的onActivityResult ,如下所示:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_container);
    fragment.onActivityResult(requestCode, resultCode, data);
}

您可以在Activity的onActivityResult方法中定义此部分:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK){

    uri = data.getData();

        final String[] filePathColumn = {MediaStore.MediaColumns.DATA, MediaStore.MediaColumns.DISPLAY_NAME};
        Cursor c = getActivity().getContentResolver()
                .query(uri,filePathColumn,null,null,null);

        if (c.moveToFirst()){
            int ids = c.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            uri = Uri.parse(c.getString(ids));
            filename = uri.toString();
            c.close();
        }
        // You do not need this any more
        //sendResult(Activity.RESULT_OK);
        //dismiss();
        // Just find your fragment and call it's onActivityResult
        Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.your_container);
        fragment.onActivityResult(requestCode, resultCode, data);
    }

}

我认为此更改将为您提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM