从图库中获取图像以在片段中的图像视图中设置? [复制]

Posted

技术标签:

【中文标题】从图库中获取图像以在片段中的图像视图中设置? [复制]【英文标题】:Get image from gallery to set in imageview in fragment? [duplicate] 【发布时间】:2016-03-13 09:05:57 【问题描述】:

如何从图库中获取图像以在片段中的 Imageview 中设置? onActivityResult 没有在片段中调用..这是我在片段中编写的代码

img_user.setOnClickListener(new View.OnClickListener() 
            @Override
        public void onClick(View v) 

            Intent i = new Intent(Intent.ACTION_PICK,
                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(i, RESULT_LOAD_IMAGE);


        
    );


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


        if (data != null) 
            Uri selectedImage = data.getData();
            String[] filePathColumn =  MediaStore.Images.Media.DATA ;
            Cursor cursor = getContext().getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);

            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String picturePath = cursor.getString(columnIndex);
            img_user.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            cursor.close`enter code here`();
         else 
            Toast.makeText(getActivity(), "Try Again!!", Toast.LENGTH_SHORT)
                    .show();
        

    

【问题讨论】:

请提供更多上下文。什么没有按您预期的方式工作? startActivityForResult 在 Fragment @Niral 中工作 【参考方案1】:

你可以这样做......在你的主要活动中

  @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
       //call super 
       super.onActivityResult(requestCode, resultCode, data);
     

在你的片段中

 Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                // ******** code for crop image
                i.putExtra("crop", "true");
                i.putExtra("aspectX", 100);
                i.putExtra("aspectY", 100);
                i.putExtra("outputX", 256);
                i.putExtra("outputY", 356);

                try 

                    i.putExtra("return-data", true);
                    startActivityForResult(
                            Intent.createChooser(i, "Select Picture"), 0);
                catch (ActivityNotFoundException ex)
                    ex.printStackTrace();
                

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==0 && resultCode == Activity.RESULT_OK)
            try 
                Bundle bundle = data.getExtras();
                Bitmap bitmap = bundle.getParcelable("data");
                img_user.setImageBitmap(bitmap);
             catch (Exception e) 
                e.printStackTrace();
            
        
    

非常适合我

【讨论】:

【参考方案2】:

我也遇到了同样的问题。实际上,startActivityForResult() 的回调正在返回父活动,因此您需要进行 从片段到onActivityResult()函数的显式调用如下。

在 Parent Activity 类中,重写 onActivityResult() 方法,甚至在 Fragment 类中重写,并调用如下代码。

在父类中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    Fragment fragment = getFragmentManager().findFragmentById(R.id.container);
    fragment.onActivityResult(requestCode, resultCode, data);

在子类中: 扩展片段执行您在 imageview 上设置图像的逻辑。

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) 



        if (data != null) 
            Uri selectedImage = data.getData();
            String[] filePathColumn =  MediaStore.Images.Media.DATA ;
            Cursor cursor = getActivity().getContentResolver().query(selectedImage, filePathColumn, null, null, null);

                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                 String picturePath = cursor.getString(columnIndex);
                image.setImageBitmap(BitmapFactory.decodeFile(picturePath));

                cursor.close();
             else 
                Toast.makeText(getActivity(), "Try Again!!", Toast.LENGTH_SHORT).show();
            
            super.onActivityResult(requestCode, resultCode, data);
        

【讨论】:

这段代码对我有帮助。我希望它能解决你的问题。我从***.com/questions/6147884/…得到帮助【参考方案3】:

请找到以下代码,它将起作用。将此添加到您的片段中

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 

//Your stuff


【讨论】:

@ViktorYakunin 为什么,你能告诉我吗? 在原始问题中指出这不起作用。我之前遇到过这个问题,你必须传递请求代码> 0,如果它没有帮助,在Activity中找到你的片段并显式调用onActivityResult。 我已经在许多项目中测试了这段代码,并且工作正常。

以上是关于从图库中获取图像以在片段中的图像视图中设置? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

使用片段从图库中选择图像

如何从图库中加载图像视图中的图像?

当相机应用程序打开以在 android studio 中获取图像时,您可以打开图库吗?

Android:如何在设置图像视图时检测从图库中选择的图像方向(纵向或横向)?

从手机图库中获取随机图片并在视图中显示

如果从图库中选择图像后,如何设置要查看的图像,调用 onCreate 方法并且它已经在该视图中设置了图像?