Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 未在片段中调用onActivityResult_Android_Fragment - Fatal编程技术网

Android 未在片段中调用onActivityResult

Android 未在片段中调用onActivityResult,android,fragment,Android,Fragment,这是我从图库中拍照的代码 public class FragmentLayout1 extends Fragment implements OnClickListener { View root; Context c; Button add_image; DialogAddImage image; RelativeLayout layout_image; String path; RunAnimations anima; pu

这是我从图库中拍照的代码

public class FragmentLayout1 extends Fragment implements OnClickListener {

    View root;
    Context c;
    Button add_image;
    DialogAddImage image;
    RelativeLayout layout_image;
    String path;
    RunAnimations anima;


    public void setContext(Context c){
        this.c = c;
        Constants con = new Constants(c);   
    }

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        anima = new RunAnimations();
        image = new DialogAddImage((Activity) c);

        Bundle bun = new Bundle();
        path = bun.getString("path");

        root = inflater.inflate(R.layout.layout_1, container, false);
        add_image = (Button)root.findViewById(R.id.button2);
        add_image.setOnClickListener(this);

        layout_image = (RelativeLayout)root.findViewById(R.id.layout_image);

        if(!TextUtils.isEmpty(path)){
            Log.e("path", path);
             Drawable d = Drawable.createFromPath(path);
             layout_image.setBackground(d);
        }


        return root;


    }



    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        anima.loadAnimationView(c, R.anim.alpha_button, v);
        if(v == add_image){
            image.showDialog();
        }

    }


     //============= fungsi untuk menerima hasil pilihan user dalam kotak dialog ambil gambar=============
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.e("result", "Result");
        new ImageResult((Activity) c).resultOfImage(requestCode, resultCode, data, image.getUri(), false);
    }
在“单击方法”中,我已单击“添加图像”按钮。“添加图像”将显示一个对话框,供用户从照相机或多媒体资料中拍照 这是我的对话代码

public class DialogAddImage{
    private Activity c;
    private Uri mImageCaptureUri;
    private Dialog dialog;
    AnimasiActivity aa;
    Button camera, galeri;

    public DialogAddImage(Activity c){
        this.c = c;

        aa = new AnimasiActivity(c);
        setDialog();
    }

    //untuk mendapatkan uri yang menyimpan informasi path file image
    public Uri getUri(){
        return mImageCaptureUri;
    }


    @SuppressWarnings("deprecation")
    private void setDialog(){       
        dialog = new Dialog(c);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);   
        dialog.setContentView(R.layout.dialog_add_image);           
        dialog.getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));

        camera = (Button) dialog.findViewById(R.id.button1);
        galeri = (Button)dialog.findViewById(R.id.button2);

        //kalo user pilih dari kamera
        camera.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {           
                hideDialog();
                Intent intent    = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                String file_name = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date());
                File file = new File(Constants.path_image +file_name + ".jpg");
                mImageCaptureUri = Uri.fromFile(file);

                intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);

                try {                        
                    intent.putExtra("return-data", true);
                    intent.putExtra("mImageCaptureUri", mImageCaptureUri);                            

                    aa.startForwardForResult(intent, Constants.PICK_FROM_CAMERA);
                } catch (Exception e) {
                    e.printStackTrace();   
                }  



            }
        });

        //kalo user pilih dari galery
        galeri.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View arg0) {                
                hideDialog();
                Intent intent = new Intent(); 
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);                   

                aa.startForwardForResult(intent, Constants.PICK_FROM_FILE);
            }

        });



    }

    public void showDialog(){

        dialog.show();
    }

    public void hideDialog(){
        dialog.dismiss();
    }


}

但当我从图库中选择图像时,该图像不会显示在我的片段中。而activityResult方法从未调用,但为什么???任何解决方案,请

覆盖父活动中的onActivityResult,即所有片段的父级

确保从片段调用startActivityForResult()而不是getActivity().startActivityForResult()。参考如果从片段中调用
startActivityForResult()
,则将在片段中调用
onActivityResult()
。如果您从活动中调用
startActivityForResult()
,则将在活动中调用
onActivityResult()
。基本上,调用
startActivityForResult()
的地方就是将调用
onActivityResult()
的地方


还有一件事,在Android中,创建对话框的首选方法是扩展类。

如果您在
活动中覆盖
onActivityResult
,那么请确保您也在那里调用
super.onActivityResult
,以便将结果传播到您的片段。

这个问题非常敏感,观察起来也不太棘手(fix)我为这个做了如下准备

当您从活动A调用活动B时,源活动(A)实例应位于堆栈(内存)中,以调用“onActivityResult”回调

下面解释问题的原因

观察:从材料设计背面和NavUtils.navigateUpFromSameTask-navigateUpFromSameTask的描述如下 与调用navigateUpTo(sourceActivity,getParentActivityIntent(sourceActivity))等效的便利方法。sourceActivity将通过此调用完成

记住当使用此方法时,sourceActivity(A)将从堆栈(内存)中删除。

当没有sourceActivity(A)时,就没有基础实例(A)可以调用“onActivityResult”回调

  • 您只需在fragment
    BaseActivity.startActivityForResult
    上重写BaseActivity
    onActivityResult

  • 关于BaseActivity添加接口

    private OnBaseActivityResult baseActivityResult;

  • On Fragment implementsOnBaseActivityResult


  • 我有一个自定义的DialogFragment,我面临同样的问题。不需要从父方法触发它。您必须调用startActivityForResult()而不是getActivity()。startActivityForResult()就像上面回答的@umesh一样。

    当您从片段调用
    startActivityForResult
    时,结果将被发送回活动的
    onActivityResult
    。而不是在活动的
    onActivityResult
    中使用
    super.onActivityResult
    ,结果将被发送回片段的
    onActivityResult
    。您可以在此处编写代码。不要在片段的
    onactivityResult
    中使用
    getActivity.onactivityResult
    ,因为它将引用活动的
    onactivityResult

    签出重复问题有相同的问题您能告诉我吗?有这么多代码片段覆盖了我的一天在没有呼叫super的情况下运行结果。我认为它没有任何作用。。。