[英]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.