簡體   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