0

私のアプリは、メインビューから次の新しいビューを開きます。

Intent ElementsIntent = new Intent(this, ElementList.class);
startActivityForResult(ElementsIntent, 0);

これは要素のリストを表示し、これらの要素の1つを押すと、新しいアクティビティで以前と同じようにビューが開きます。このビュー内で、ボタンクリックハンドラーにAlertDialogを表示したいのですが、show()を呼び出すとアプリがクラッシュします。

ダイアログを開いてみる場所によっては、コンテキストが正しくないことが関係していると確信していますが、メインビューから静的コンテキストを作成してみましたが、element.thisを使用してみました。クラスがアクティビティに接続されており、getApplicationContextを試しましたが、これらすべてがアプリのクラッシュにつながります。

誰かが私が間違っていることを説明してくれることを願っています。

ありがとう。

クラッシュするAlertDialogコードは次のとおりです。

public void GoBackClickHandler(View v)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(ElementItem.this);
    builder.setMessage("Skal ændringer i besvarelse gemmes?")
           .setCancelable(false)
           .setPositiveButton("Ja", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   dialog.cancel();
                if(inputIsValue())
                {
                    UpdateELement task = new UpdateELement();
                    task.applicationContext = ElementItem.this;
                    task.execute(1);
                }
               }
           })
           .setNegativeButton("Nej", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                    finish();
               }
           });
    AlertDialog alert = builder.create();
    alert.show();       
}

このコードをOnCreateに移動すると、アラートは問題なく表示され、アプリのクラッシュは発生しません。ClickHandlerに配置した場合にのみクラッシュします。

4

2 に答える 2

1

私はついにこの問題の解決策を見つけました。

アクティビティのコンテキストをonCreateメソッドの変数に保存してから、これをClickHandler AlertDialog呼び出しで使用する必要がありました。そうすれば、すべてが機能します。

これがこの厄介な問題を抱えている他の誰かの助けになることを願っています。

于 2012-11-17T10:21:24.453 に答える
1
public class SplashActivity extends AppCompatActivity implements DialogInterface.OnClickListener {

    //Object to hold the listener instance
    DialogInterface.OnClickListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        //Assign this to listener.
        listener = this;

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {

                AlertDialog.Builder builder = new AlertDialog.Builder(SplashActivity.this);
                builder.setTitle("Alert");
                builder.setMessage("Alert Message...!");

                //Here pass the listener object.
                builder.setPositiveButton("OK", SplashActivity.this.listener);
                builder.show();

            }

        });

    }

    @Override
        public void onClick(DialogInterface dialog, int which) {

            SplashActivity.this.finish();
        }

}
于 2016-08-18T17:46:46.890 に答える