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了

你可以这样:
Java code

TextView test = new TextView(this);
test.setText("Avtivity 1");
addContentView(test, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));