0

我正在尝试制作一个简单的文字游戏,但我什至无法完成第一步。布局中有一个文本视图和 3 个单选按钮。我想在您单击其中一个单选按钮时更改文本并确定应用程序将使用什么文本,我有一个位置 int。示例:我选择按钮一:如果位置 = 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(“这是文本 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

如果您在设置内容视图之前尝试获取视图,它将为空,因此在此示例中,文本为空,因为您在设置内容视图之前调用它。您可以使用调试器进行验证。

因此,当您尝试通过 text.setText(...) 访问它时,它会因 NullPointerException 而崩溃

正如大卫 M 也说过,在 setContentView 之后调用 findViewById 将解决问题

正如 David M 所评论的那样,对于将来的参考,LogCat 输出将很有帮助。

于 2012-12-12T18:42:35.697 回答
0

感谢大家。这是错误的顺序

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

谢谢你。

于 2012-12-13T13:19:54.823 回答