我正在尝试制作一个简单的文字游戏,但我甚至无法完成第一步。 布局中有一个textview和3个单选按钮。 我想在单击其中一个单选按钮时更改文本并确定应用程序将使用的文本,我有一个位置int。 示例:我选择按钮1:如果position = 1,则将set text设置为text 2.如果position = 9,则将text设置为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然后一切正常。但是当我想要更改文本时,它会在我选择单选按钮时崩溃。
答案 0 :(得分:2)
在设置此活动的UI之前,您似乎尝试获取对TextView的引用。而不是
text = (TextView) findViewById(R.id.text);
setContentView(R.layout.p1);
试
setContentView(R.layout.p1);
text = (TextView) findViewById(R.id.text);
答案 1 :(得分:0)
如果在设置内容视图之前尝试获取视图,则它将为null,因此在此示例中,文本为null,因为您在设置内容视图之前调用它。您可以使用调试器验证它。
因此,当您尝试通过text.setText(...)访问它时,它将因NullPointerException而崩溃
正如David M所说,在setContentView之后调用findViewById将解决问题
对于将来的参考资料,正如David M评论的那样,LogCat输出会很有帮助。
答案 2 :(得分:0)
setContentView(R.layout.p1);
text = (TextView) findViewById(R.id.text);
谢谢。