Tôi đã tìm kiếm trong hàng ngàn bài đăng cho điều này, nhưng tôi không tìm thấy cách giải quyết vấn đề của mình.onActivityResult() không được thực hiện trong DialogFragment
Tôi có một ImageView. Khi người dùng nhấp vào ImageView này, một DialogFragment được hiển thị và người dùng có thể chọn giữa chụp ảnh mới bằng máy ảnh hoặc chọn ảnh từ thư viện. Cho đến đây, mọi thứ đều hoạt động tốt.
Vấn đề là, hình ảnh do người dùng chọn, nên thay thế hình ảnh hiện tại trong ImageView, nhưng bit này, là một cái không hoạt động, bởi vì hàm onActivityResult() thực thi mã này không được được thực hiện, vì vậy hình ảnh trong ImageView luôn giữ nguyên. Tôi sẽ đánh giá cao bất kỳ sự giúp đỡ nào, bởi vì tôi không thấy hoặc hiểu, tại sao mã này không được thực hiện.
Tôi nhận được một cảnh báo trong LogCat ngay sau khi người sử dụng chọn hình ảnh:
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);
}
}
}
Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.
không hiển thị cho FragmentActivity. – Rowan
Điều này dường như không còn đúng trên Android 4.4.2 nữa. Nếu đoạn này gọi 'startActivityForResult (...)' của riêng nó, 'onActivityResult (...)' của hoạt động là * not * được gọi. Nếu đoạn gọi là 'getActivity(). StartActivityForResult (...)', nó là. –