繁体   English   中英

为什么 alertDialog 会导致我的应用程序崩溃?

[英]Why does alertDialog cause my app to crash?

公共类 SignUpActivity 扩展 AppCompatActivity {

private CircleImageView profilePic,galleryPick,cameraPick;
private ActivityResultLauncher<Intent> activityResultLauncher;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);

    profilePic = findViewById(R.id.circular_image);

    
    activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
        @Override
        public void onActivityResult(ActivityResult result)
        {
            if(result.getResultCode() == RESULT_OK && result.getData() != null)
            {
                Bundle bundle = result.getData().getExtras();
                Bitmap bitmap = (Bitmap) bundle.get("data");
                profilePic.setImageBitmap(bitmap);
            }
        }
    });

    profilePic.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
           chooseProfilePic();
        }
    });

}


private void chooseProfilePic()
{
    AlertDialog.Builder builder = new AlertDialog.Builder(SignUpActivity.this);
    LayoutInflater inflater = getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.alert_dialog,null);
    builder.setCancelable(false);
    builder.setView(dialogView);

    galleryPick = findViewById(R.id.gallery_pick);
    cameraPick = findViewById(R.id.camera_pick);

    AlertDialog alertDialog = builder.create();
    alertDialog.show();



    cameraPick.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v)
        {
            Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            if(cameraIntent.resolveActivity(getPackageManager()) != null)
            {
                activityResultLauncher.launch(cameraIntent);
            }
        }
    });
}

}

所以我是 Android Studio 的初学者,由于 startForActivityResult 已被弃用,我正在寻找替代它的东西。 新方法有效,但与包括警报对话框在内的私有方法一起使用时会出现问题。

您正在从错误的视图中找到对话框中按钮的resourceId 当您从活动/片段视图中找到它时,按钮会出现在对话框中。
更新您的代码以从 dialogView 中找到它。

 AlertDialog.Builder builder = new AlertDialog.Builder(SignUpActivity.this);
    LayoutInflater inflater = getLayoutInflater();
    View dialogView = inflater.inflate(R.layout.alert_dialog,null);
    builder.setCancelable(false);
    builder.setView(dialogView);

    galleryPick = dialogView.findViewById(R.id.gallery_pick); // find id from dialog view
    cameraPick = dialogView.findViewById(R.id.camera_pick); // find id from dialog view

    AlertDialog alertDialog = builder.create();
    alertDialog.show();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM