Reputation: 73
I'm making a function which is when i select "Choose from gallery" in an alert dialog box, the selected image inside gallery will appear in the imagebutton. There isnt any code errors or logcat errors. The problem is OnActivityResult isn't called. It is inside a fragment. Can someone help me with this? thank you.
public static class CardFrontFragment extends Fragment implements OnClickListener{
private int serverResponseCode = 0;
private ProgressDialog dialog = null;
private String uploadServerUri = null;
private String imagepath = null;
private ImageButton upload;
public CardFrontFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
RelativeLayout layout = (RelativeLayout) inflater.inflate(
R.layout.card_front, container, false);
upload = (ImageButton) layout.findViewById(R.id.fileUpload);
upload.setOnClickListener(this);
uploadServerUri = Constants.serverUrl + "api/FileUpload";
return layout;
}
@Override
public void onClick(View arg0) {
if(arg0 == upload)
{
selectImage();
}
}
private void selectImage() {
final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Add Photo!");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int item) {
if (options[item].equals("Take Photo"))
{
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
startActivityForResult(intent, 1);
}
else if (options[item].equals("Choose from Gallery"))
{
Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, 2);
}
else if (options[item].equals("Cancel")) {
dialog.dismiss();
}
}
});
builder.show();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2 && resultCode == RESULT_OK) {
//Bitmap photo = (Bitmap) data.getData().getPath();
Uri selectedImageUri = data.getData();
imagepath = getPath(selectedImageUri);
Bitmap bitmap=BitmapFactory.decodeFile(imagepath);
upload.setImageBitmap(bitmap);
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = getActivity().managedQuery(uri, projection, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
}
Upvotes: 1
Views: 883
Reputation: 4284
please add following code in your activity, it will fire your onActivityResult in fragment
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data)
}
Upvotes: 0
Reputation: 1268
I think that this discussion will help you. You are implementing startActivityForResult in a Fragment. Your Activity is receiving the result and you should propagate it to your fragment.
onActivityResult is not being called in Fragment
Hope it helps.
Upvotes: 1
Reputation: 2969
Change this Override onClick method with;
@Override
public void onClick(View arg0) {
if(arg0.getId() == upload)
{
selectImage();
}
}
Because upload is id of your ImageButton.
Edit: Or use
@Override
public void onClick(View arg0) {
if(arg0.getId() == R.id.fileUpload)
{
selectImage();
}
}
Upvotes: 0