代码之家  ›  专栏  ›  技术社区  ›  Tony

OnActivityResult未被调用

  •  1
  • Tony  · 技术社区  · 7 年前

    在活动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

    3 回复  |  直到 7 年前
        1
  •  3
  •   Kubik    7 年前

    在活动A中显示对话框时,将对活动A的引用设置为参数: alert.showDialog(this); 然后在CustomDialog中,将此引用另存为活动变量:

    public void showDialog(Activity activity) { this.activity = activity; ...}

    this.activity 是活动A的实例。稍后在gallerycontent()中,您将按如下方式启动结果的活动:

    private void galleryIntent() { ... activity.startActivityForResult(Intent.createChooser(intent, "Select File"), 1); }

    这意味着onActivityResult将在活动A中调用,而不是在自定义对话框中调用,因为您使用了 activity

    1) 替换 activity.startActivityForResult 具有 CustomDialog.this.startActivityForResult

    2) 移动你的 onActivityResult 从CustomDialog到活动A的代码

        2
  •  1
  •   marcinj    7 年前

    您正在呼叫: startActivityForResult 在 activity 与 CustomDialog onActivityResult 被称为。我不记得打过电话 startActivityForResult公司 activity.startActivityForResult startActivityForResult公司

    顺便说一句,在你的 super.onActivityResult(requestCode, resultCode, data); 两次。这是不对的。

        3
  •  0
  •   Goodman Khumalo    7 年前