我在我的应用中使用Fragments
。我在ImageView
中有一个Fragment
。点击ImageView
用户时,应该可以从图库中选择图片,图片应该显示在同一个ImageView
中。我在Activity
类中单独尝试了这个并且它工作正常,但我怎样才能在Fragment
类中执行此操作?我试过的代码是 -
public class FragmentCreateGroup extends Fragment {
ImageView group;
EditText et;
LayoutInflater glob_inflater;
View glob_view;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_creategroup, container, false);
glob_view=v;
glob_inflater=inflater;
et = (EditText) v.findViewById(R.id.cr_group_grpname_input);
group = (ImageView) v.findViewById(R.id.group_image);
group.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Select Picture"), 1);
}
});
return v;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == -1) {
if (requestCode == 1) {
Uri selectedImageUri = data.getData();
String selectedImagePath = getPath(selectedImageUri);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeFile(selectedImagePath, options);
group.setImageBitmap(BitmapFactory.decodeFile(selectedImagePath));
}
}
}
public String getPath(Uri uri) {
// just some safety built in
if( uri == null ) {
// TODO perform some logging or show user feedback
return null;
}
Activity act=new Activity();
// try to retrieve the image from the media store first
// this will only work for images selected from gallery
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor =act.managedQuery(uri, projection, null, null, null);
if( cursor != null ){
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
// this is our fallback here
return uri.getPath();
}
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
}
}
答案 0 :(得分:0)
您不应该在Activity
中使用startActivityForResult
,而是在Fragment
中使用Fragment
,然后在onActivityResult
中覆盖{{1}}来执行您的逻辑。< / p>
它是一样的,请试一试!
答案 1 :(得分:0)
对于StartActivityForResult,您必须按照以下步骤获得更好的解决方案。
1.开始时使用getActivity.StartActivityForResult()
2.User接口与片段和活动进行通信。
private void chooseOption() {
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
pickImage();
break;
case DialogInterface.BUTTON_NEGATIVE:
takePic();
break;
}
}
};
AlertDialog.Builder builder = new AlertDialog.Builder(
this.getActivity());
builder.setMessage("Choose your option")
.setPositiveButton("From Gallery", dialogClickListener)
.setNegativeButton("Camera", dialogClickListener).show();
}
public void pickImage() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
getActivity().startActivityForResult(intent, REQUEST_CODE);
}
public void takePic() {
Intent cameraIntent = new Intent(
android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
getActivity().startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
}
显示用于从图库或相机中获取图像的对话框的代码
在您的活动中定义此界面
public interface onImageGot {
public void onImageGotSelected(Uri position);
}
在你的活动中为这个界面创建一个实例本身就像
之类的oncreateonImageGot mCallback;
在onActivityResult上启动此实例并使用..
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri selectedImage = null;
EditProfile titleFragmentByTag = (EditProfile) getSupportFragmentManager()
.findFragmentByTag("edit");
if (titleFragmentByTag != null) {
mCallback = (onImageGot) titleFragmentByTag;
if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)
try {
selectedImage = data.getData();
} catch (Exception e) {
e.printStackTrace();
}
else if (requestCode == CAMERA_PIC_REQUEST
&& resultCode == Activity.RESULT_OK) {
selectedImage = getImageUri(getApplicationContext(),
(Bitmap) data.getExtras().get("data"));
}
if (selectedImage != null) {
mCallback.onImageGotSelected(selectedImage);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = Images.Media.insertImage(inContext.getContentResolver(),
inImage, "Title", null);
return Uri.parse(path);
}
在片段类中实现HomeScreenActivity.onImageGot 您的片段将覆盖此
@Override
public void onImageGotSelected(Uri position) {
UpdateImage(position);
}
在这里你可以从这里得到uri你可以像你想要的那样使用..