同一个activity使用setContentView进行界面切换后,原界面其余button监听失效?该怎么处理

同一个activity使用setContentView进行界面切换后,原界面其余button监听失效?
如题,在xml中布局了两个界面a,b,在主界面a通过button1与切面b切换,再从b中通过backbutton返回a,多次重复都没有问题,但第一次从b返回到a后,a中原先定义的其余button的监听都失效了,这是为啥呢?求高人解答!谢谢!

我是用如下方式切换的
public class A extends Activity {
public void onCreate(Bundle savedInstanceState) {
  ...
  Button01.setOnClickListener(new Button.OnClickListener()
  {
  public void onClick(View v)
  {
  jumpToLayoutb();
  }
  });
  ...
 }

 定义其它的button监听
}


//Convert to layout a
  public void jumpToLayouta(){
  setContentView(R.layout.a);
  Button01 = (Button) findViewById(R.id.mybutton01);
  Button01.setOnClickListener(new Button.OnClickListener(){
  public void onClick(View v) {
  jumpToLayoutb();
  }
  });
  }
  //Convert to layout b
  public void jumpToLayoutb(){
  setContentView(R.layout.b);
  Button backbutton = (Button)findViewById(R.id.mybackbutton);
  backbutton.setOnClickListener(new Button.OnClickListener(){
  public void onClick(View v) {
  jumpToLayouta();
  }
  });
  }

------解决方案--------------------
当你切回去的时候,所有的View对象都重新创建了。没有为新创建的View注册监听。

你不应该使用这个函数到更新Layout
public void setContentView (int layoutResID)

应该使用
public void setContentView (View view)

在OnCreate时,你需要首先把layout资源变为View对象。
可以看看LayoutInflater
------解决方案--------------------
不会创建新的Activity,只是创建了新的View树。

LayoutInflater flater = this.getLayoutInflater();
View viewa = flater.inflate(R.layout.a, null); 
View viewb = flater.inflate(R.layout.b, null);
------解决方案--------------------
当然失效了,因为还是同一个activity,但是view变了。需要重新注册一遍onClickListener.
------解决方案--------------------
使用ViewStackActivity,新鲜出炉:
http://blog.csdn.net/dyw/archive/2010/09/28/5912011.aspx