Szukałem w tysiącach wpisów na ten temat, ale nie wiem, jak rozwiązać mój problem.Funkcja onActivityResult() nie jest wykonywana w DialogFragment
Mam ImageView. Gdy użytkownik kliknie na ten obraz, pojawi się DialogFragment, a użytkownik może wybrać między zrobieniem nowego zdjęcia z aparatem lub wyborem zdjęcia z galerii. Do tego czasu wszystko działa dobrze.
Problem polega na tym, że obraz wybrany przez użytkownika powinien zastąpić bieżący obraz w ImageView, ale ten bit jest tym, który nie działa, ponieważ funkcja onActivityResult(), która wykonuje ten kod, nie jest wykonane, więc obraz w ImageView zawsze pozostaje taki sam. Byłbym wdzięczny za każdą pomoc, ponieważ nie widzę ani nie rozumiem, dlaczego ten kod nie jest wykonywany.
Dostaję ostrzeżenie w LogCat zaraz po wybraniu przez użytkownika obraz:
05-07 12:17:11.542: I/ActivityManager(59): Displayed activity com.android.gallery/com.android.camera.ImageGallery: 935 ms (total 935 ms)
05-07 12:17:12.812: W/FragmentActivity(3614): Activity result no fragment exists for index: 0x10001
05-07 12:17:12.862: W/InputManagerService(59): Starting input on non-focused client [email protected] (uid=10016 pid=317)
Activity.java:
private ImageView imageLoader = null;
imageLoader = (ImageView) findViewById(R.id.f_imageLoader);
imageLoader.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
ImageLoaderDialog imageLoaderDialog = new ImageLoaderDialog(imageLoader);
imageLoaderDialog.show(getSupportFragmentManager(), "imageLoaderDialog");
}
Activity.xml:
<ImageView
android:id="@+id/f_imageLoader"
android:layout_width="wrap_content"
android:layout_height="0dip"
android:layout_weight="0.20"
android:contentDescription="@string/imgDesc"
android:src="@drawable/my_image" />
ImageLoaderDialog .java:
//Dialog for choosing between new camera image or gallery image.
public class ImageLoaderDialog extends android.support.v4.app.DialogFragment {
private ImageView targetImageView = null;
final int TAKE_PICTURE = 0;
final int PICK_PHOTO = 1;
public ImageLoaderDialog (View view) {
targetImageView = (ImageView) view;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Selecciona");
final String[] imageSources = getResources().getStringArray(R.array.imageSources);
builder.setItems(imageSources, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
switch(item) {
case TAKE_PICTURE:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, TAKE_PICTURE);
break;
case PICK_PHOTO:
Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(pickPhoto, PICK_PHOTO);
break;
}
}
});
return builder.create();
}
//Set image to user's selected image.
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
if (resultCode == android.app.Activity.RESULT_OK) {
Uri selectedImage = intent.getData();
Log.i("IMAGEN", ""+selectedImage);
targetImageView.setImageURI(selectedImage);
}
}
}
Każda pomoc będzie bardzo doceniana.
niewidoczny dla FragmentActivity. – Rowan
To najwyraźniej już nie prawda w systemie Android 4.4.2. Jeśli fragment wywołuje własny 'startActivityForResult (...)', funkcja 'onActivityResult (...)' jest * nie * wywoływana. Jeśli fragment nazywa się "getActivity(). StartActivityForResult (...)", to jest. –