我正在试着做一个简单的文本游戏,但我甚至不能通过第一步。布局中有一个文本视图和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("this is text 1");“更改为其他行。例如setcontentview,那么一切都可以正常工作。但是当我想要更改文本时,当我选择单选按钮时,它就崩溃了。
发布于 2012-12-13 02:41:16
在设置此活动的UI之前,您似乎正在尝试获取对TextView的引用。而不是
text = (TextView) findViewById(R.id.text);
setContentView(R.layout.p1);试一试
setContentView(R.layout.p1);
text = (TextView) findViewById(R.id.text);发布于 2012-12-13 02:42:36
如果您在设置内容视图之前尝试获取视图,则它将为空,因此在本例中text为空,因为您在设置内容视图之前调用它。您可以使用调试器验证这一点。
因此,当您尝试通过text.setText(...)访问它时它将与NullPointerException一起崩溃
正如David M也说过的,在setContentView之后调用findViewById可以解决这个问题
对于将来的参考,正如David M所评论的那样,LogCat输出将是有帮助的。
发布于 2012-12-13 21:19:55
感谢你们所有人。这是错误的顺序
setContentView(R.layout.p1);
text = (TextView) findViewById(R.id.text);谢谢。
https://stackoverflow.com/questions/13846278
复制相似问题