从图库中获取图像以在片段中的图像视图中设置? [复制]
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 中获取图像时,您可以打开图库吗?