[英]OnActivityResult not getting called
在活動A中,我想打開一個對話框(CustomDialog)。 在CustomDialog內部,它具有一個打開照相機的按鈕。 但是從圖庫中選取圖像后,不會調用onActivityResult
。 沒有toast
被顯示。
活動A
private void openDialog() {
CustomDialog alert = new CustomDialog();
alert.showDialog(this);
}
自定義對話框
public class CustomDialog extends Activity{
Activity activity;
ImageView imageView;
public void showDialog(Activity activity) {
this.activity = activity;
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.custom_dialog);
dialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
dialog.setCanceledOnTouchOutside(true);
imageView = (ImageView) dialog.findViewById(R.id.logoApp);
Button galleryBtn = (Button) dialog.findViewById(R.id.galleryBtn);
galleryBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
galleryIntent();
}
});
dialog.show();
}
private void galleryIntent() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);//
activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Toast.makeText(activity,"sdddddsss",Toast.LENGTH_LONG).show();
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == 1) {
onSelectFromGalleryResult(data);
}else{
// ...
}
}
}
@SuppressWarnings("deprecation")
private void onSelectFromGalleryResult(Intent data) {
Bitmap bm=null;
if (data != null) {
try {
bm = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver(), data.getData());
} catch (IOException e) {
e.printStackTrace();
}
}
imageView.setImageBitmap(bm);
}
}
我遵循此http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
在活動A中顯示對話框時,可以alert.showDialog(this);
活動A的引用設置為參數: alert.showDialog(this);
然后在CustomDialog中,將此引用另存為活動變量:
public void showDialog(Activity activity) { this.activity = activity; ...}
這意味着this.activity
是Activity A的實例。稍后,在您的galleryIntent()中,您將為以下結果啟動活動:
private void galleryIntent() { ... activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1); }
這意味着onActivityResult將在活動A中而不是在“自定義”對話框中調用,因為您已經使用了activity
變量。
您有2個修復選項:
1)將activity.startActivityForResult
替換為CustomDialog.this.startActivityForResult
2)將onActivityResult
代碼從CustomDialog移到Activity A
您正在調用: activity
參考上的startActivityForResult
,它與希望在其上調用onActivityResult
的CustomDialog
。 我不記得曾經在不是前台的活動實例startActivityForResult
用過startActivityForResult
-我不確定它是否會起作用。 我建議您更改: activity.startActivityForResult
到startActivityForResult
順便說一句 在您的onActivityResult
您已經調用了super.onActivityResult(requestCode, resultCode, data);
兩次。 這是不正確的。
之所以沒有調用onActivityResult()的原因是因為當您為結果啟動活動時即調用了onActivityResult(),即startActivityForResult(...),然后在啟動的活動返回或結束時調用了onActivityResult()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.