0

シンプルなテキストゲームを作ろうとしていますが、最初のステップさえできません。レイアウトには textview と 3 つのラジオ ボタンがあります。ラジオ ボタンの 1 つをクリックしたときにテキストを変更し、アプリが使用するテキストを決定するために、位置 int があります。例: ボタン 1 を選択します。位置 = 1 の場合、テキストをテキスト 2 に設定します。位置 = 9 の場合、テキストを 11 に設定します。コードは次のとおりです。

import android.app.Activity;
import android.os.Bundle;
import android.view.Window;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;


public class Game extends Activity implements OnCheckedChangeListener{
    public int position;
    TextView text;
    RadioGroup rggr;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        position = 1;
        text = (TextView) findViewById(R.id.text);

        setContentView(R.layout.p1);

        rggr = (RadioGroup) findViewById(R.id.rgGr);
        rggr.setOnCheckedChangeListener(this);
    }

    public void onCheckedChanged(RadioGroup group, int checkedId) {
        // TODO Auto-generated method stub
        switch (checkedId){
                case R.id.rb1:
                    if(position == 1){
                        text.setText("this is text 1");
                        position = 2;

                    }
                }
            }
        }

「text.setText("this is text 1");」という行を変更すると、別のものに。たとえば、setcontentview の場合はすべて機能します。しかし、テキストを変更したい場合、ラジオボタンを選択した瞬間にクラッシュします。

4

3 に答える 3

2

このアクティビティの UI を設定する前に、TextView への参照を取得しようとしているようです。それ以外の

    text = (TextView) findViewById(R.id.text);
    setContentView(R.layout.p1);

試す

    setContentView(R.layout.p1);
    text = (TextView) findViewById(R.id.text);
于 2012-12-12T18:41:16.220 に答える
0

皆様ありがとうございました。順番間違えた

 setContentView(R.layout.p1);
 text = (TextView) findViewById(R.id.text);

ありがとうございました。

于 2012-12-13T13:19:54.823 に答える
0

コンテンツ ビューを設定する前にビューを取得しようとすると null になるため、この例では、コンテンツ ビューを設定する前に呼び出すため、テキストは null になります。デバッガーで確認できます。

そのため、text.setText(...) 経由でアクセスしようとすると、NullPointerException でクラッシュします。

David Mも言ったように、setContentViewの後にfindViewByIdを呼び出すと問題が解決します

David M がコメントしたように、今後の参照については、LogCat の出力が役立ちます。

于 2012-12-12T18:42:35.697 に答える