onActivityResult() 没有在 DialogFragment 中执行
Posted
技术标签:
【中文标题】onActivityResult() 没有在 DialogFragment 中执行【英文标题】:onActivityResult() not getting executed in DialogFragment 【发布时间】:2013-05-01 10:03:33 【问题描述】:我已经为此查看了数千个帖子,但我找不到解决问题的方法。
我有一个 ImageView。当用户点击这个 ImageView 时,会显示一个 DialogFragment,用户可以选择用相机拍摄一张新照片,或者从图库中选择一张照片。直到这里一切正常。
问题是,用户选择的图片,应该替换ImageView中的当前图片,但是这个位,是不起作用的,因为执行此代码的onActivityResult()函数没有被执行,因此 ImageView 中的图像始终保持不变。如有任何帮助,我将不胜感激,因为我看不到或不明白为什么这段代码没有被执行。
用户选择图像后,我在 LogCat 中立即收到警告:
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 com.android.internal.view.IInputMethodClient$Stub$Proxy@45fd9c38 (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_
android:layout_
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);
任何帮助将不胜感激。
【问题讨论】:
【参考方案1】:托管活动覆盖了 onActivityResult,但没有为未处理的结果代码调用 super.onActivityResult。显然,即使片段是发出 startActivityForResult 调用的片段,活动也会首先处理结果。当您考虑片段的模块化时,这是有道理的。一旦我为所有未处理的结果实现了 super.onActivityResult,片段就可以处理结果。试试这个:
getActivity().onActivityResult(requestCode, resultCode, intent);
【讨论】:
这显然不再适用于 Android 4.4.2。如果片段调用自己的startActivityForResult(...)
,则不调用活动的onActivityResult(...)
。如果片段调用getActivity().startActivityForResult(...)
,就是。以上是关于onActivityResult() 没有在 DialogFragment 中执行的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult() 没有在 DialogFragment 中执行
当我调用 startResolutionForResult 时,onActivityResult() 没有在片段中执行