android切换activity的小程序: TextView未在main.xml中声明,而是用new来写的TextView为什么会影响程序运行?解决方案
android切换activity的小程序: TextView未在main.xml中声明,而是用new来写的TextView为什么会影响程序运行?
(1)我先用new TestView,设置要显示的文本,但并未在main.xml中声明
先运行一下,一切正常,在程序中显示出文本
(2)但是当我加入button的监听程序后,到模拟器上运行时,一打开程序,程序就立即停止
源代码如下:
package com.demo.android.avtivitytest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ActivityTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView test = new TextView(this);
test.setText("Avtivity 1");
setContentView(test);
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent();
intent.setClass(ActivityTestActivity.this, Report.class);
startActivity(intent);
ActivityTestActivity.this.finish();
}
});
}
}
eclipse报错,java.lang.NullPointerException
当我把未在main.xml中生命的testview注释掉后,程序正常运行
请问这是为什么?
为什么第一次可以,第二次加入button的监听程序后就无法运行呢?
------解决方案--------------------
很显然
第二次setContentView(test) 就把前面的R.layout.main给取代了,
再调用findViewById(R.id.button)就是在 test这个TextView中找了,当然找不到这个button了
你可以这样:
(1)我先用new TestView,设置要显示的文本,但并未在main.xml中声明
先运行一下,一切正常,在程序中显示出文本
(2)但是当我加入button的监听程序后,到模拟器上运行时,一打开程序,程序就立即停止
源代码如下:
package com.demo.android.avtivitytest;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ActivityTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView test = new TextView(this);
test.setText("Avtivity 1");
setContentView(test);
Button btn = (Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent();
intent.setClass(ActivityTestActivity.this, Report.class);
startActivity(intent);
ActivityTestActivity.this.finish();
}
});
}
}
eclipse报错,java.lang.NullPointerException
当我把未在main.xml中生命的testview注释掉后,程序正常运行
请问这是为什么?
为什么第一次可以,第二次加入button的监听程序后就无法运行呢?
------解决方案--------------------
很显然
第二次setContentView(test) 就把前面的R.layout.main给取代了,
再调用findViewById(R.id.button)就是在 test这个TextView中找了,当然找不到这个button了
你可以这样:
- Java code
TextView test = new TextView(this); test.setText("Avtivity 1"); addContentView(test, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));