0

別のonClick()メソッドにメソッドがあり、そのgewinnGruen()メソッドが呼び出されるとクラッシュします。

理由を教えてください:

public void gewinnGruen() {
    Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
    dialog.setContentView(R.layout.winnergreen);
    dialog.show();
    newgame1 = (Button) findViewById(R.id.newgame1);
    newgame1.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            field1.setBackgroundResource(R.drawable.field0);
            place1 = 0;
        }
    }); 
}

メソッドがなければonClick()クラッシュせず、すべてが機能します。

4

3 に答える 3

2
newgame1 = (Button)dialog.findViewById(R.id.newgame1);
                   ^^^^^^  
于 2012-07-27T09:53:28.840 に答える
2

これを変える

newgame1 = (Button) findViewById(R.id.newgame1);

newgame1 = (Button)dialog. findViewById(R.id.newgame1);

この行で NullPointerException にヒットしています。

これは、作成したダイアログで Button を初期化しようとしているが、ここでメソッドに Dialog オブジェクトを提供していないためです。そのため、アクティビティのビューを調べて null を返します。そこにはその ID が見つからないためです。

于 2012-07-27T09:53:11.633 に答える
1

あなたのコードを

public void gewinnGruen() {

        Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
        dialog.setContentView(R.layout.winnergreen);
        dialog.show();
        newgame1 = (Button) dialog.findViewById(R.id.newgame1);
        newgame1.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                field1.setBackgroundResource(R.drawable.field0);
                place1 = 0;
            }
        }); 
    }
于 2012-07-27T09:56:51.043 に答える