我正在尝试Google University Android lab1根据从其他活动通过Intent传递的值,要求您更改TextView的文本内容。
我尝试了其余的代码,但...... 当我添加“tv.settext(...)行”时,为什么我的应用程序强制关闭?
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
* Fetch and display passed string.
*/
TextView tv = (TextView) findViewById(R.id.HelloTV);
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
String nameStr = extras.get("Username").toString();
if (nameStr != null) {
tv.setText("Hello "+nameStr);
}
}
setContentView(R.layout.main);
}
}
答案 0 :(得分:10)
查看错误日志,甚至更好,查看调试会话 - 可以看到第22行有一个空指针异常:
tv.setText("Hello "+nameStr);
这是因为tv == null。它应该由行初始化:
TextView tv = (TextView) findViewById(R.id.HelloTV);
但要在布局中使用id,您必须始终在当前活动中注册视图。该行应该在onCreate方法的早期包含:
setContentView(R.layout.main);
这是工作的Helloworld课程:
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*
* Fetch and display passed string.
*/
TextView tv = (TextView) findViewById(R.id.HelloTV);
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
String nameStr;
if (extras.get("Username") != null) {
nameStr = extras.get("Username").toString();
tv.setText("Hello "+nameStr);
}
}
}
}
此Helloworld类正确地从活动开始时发送的附加内容中检索用户名,并显示个性化问候语。
我感谢康斯坦丁·布罗夫和上一个问题here
,我找到了答案答案 1 :(得分:0)
项目布局文件夹中只有一个.xml文件吗?如果你有一个主活动的xml文件和一个由更新的eclipse提供的fragment.xml文件,你需要在自动生成的“onCreateView”函数中执行setText。这是组合片段(包含视图元素)和主要布局的地方。 所以在代码中找到下面的行或创建它:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { ... }
然后在此函数中设置视图的文本或其他必需元素(例如btn,textView ...)。如:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
//set the text of textView
TextView txvMain = (TextView) rootView.findViewById(R.id.txvMain);
txvMain.setText("SetText works now");
//set a drawable as the background of the textView
txvMain.setBackgroundResource(drawable.ic_launcher);
return rootView;
}
我期待任何进一步的问题。问候