Запустить пользовательский диалог из диалога предупреждений - ошибка NullPointer - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь запустить собственное диалоговое окно от нажатия кнопки в диалоге оповещения.Пользователь нажимает кнопку в главном пользовательском интерфейсе, которая открывает redeemAlertDialog, этот диалог спрашивает пользователя, уверены ли они, что хотят продолжить это действие.Если они нажимают «Да», то я хочу открыть свой пользовательский диалог.Тем не менее, запуск моего собственного диалогового окна вызывает сбой приложения.Logcat говорит мне, что у меня ошибка нулевого указателя на строке * text.setText ("Blah Blah" / merchantName /); *, но если я закомментирую эту строку, я получу ту же ошибку в строке button.setOnClickListener (new OnClickListener () { Если я закомментирую обе эти строки, то это сработает. После копания я думаю, что моя проблема связана с контекстом, с которым я связываю свой пользовательский диалог, когда яЯ создаю это, но я не смог исправить это. Если кто-то мог указать, где я иду не так, я был бы признателен. Мой код ниже.

решено В моемМетод onCreate изменил мое определение mContext с mContext = getApplicationContext (); на mContext = this; по некоторым причинам couponDialog = new Dialog (mContext); ему не понравилось то, что было задано getApplicationContect ();

    private void redeem() {
    AlertDialog.Builder redeemAlerDialogBuilder = new AlertDialog.Builder(this);
    redeemAlerDialogBuilder.setMessage("Are you sure you want to redeem?")
           .setCancelable(false) //User must select a button, can't use the back button
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   //Do something to launch a redeem dialog
                   //openCouponDialog();
                   couponDialog = new Dialog(mContext);
                   couponDialog.setContentView(R.layout.redeem_layout);
                   couponDialog.setTitle("Freebie Coupon");
                   couponDialog.setCancelable(false); //User should only be able to exit dialog by clicking done

                   TextView text = (TextView) findViewById(R.id.redeemMerchantName);
                   text.setText("Blah Blah"/*merchantName*/);

                   ImageView image = (ImageView) findViewById(R.id.couponImage);
                   //Set merchant coupon image here - need to download this from server when merchant is first added

                   Button button = (Button) findViewById(R.id.redeemDialogCloseButton);
                   button.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            finish();           
                        }           
                   });

                   couponDialog.show();
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {             
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel(); //Cancel redeem                
            }
        });
    redeemAlertDialog = redeemAlerDialogBuilder.create();
    redeemAlertDialog.show();
}

1 Ответ

3 голосов
/ 02 февраля 2012

Вместо:

Button button = (Button) findViewById(R.id.redeemDialogCloseButton);

TextView text = (TextView) findViewById(R.id.redeemMerchantName);

используйте

Button button = (Button) couponDialog.findViewById(R.id.redeemDialogCloseButton);
TextView text = (TextView) couponDialog.findViewById(R.id.redeemMerchantName);

Надеюсь, это работает

...