同一个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.****.net/dyw/archive/2010/09/28/5912011.aspx
如题,在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.****.net/dyw/archive/2010/09/28/5912011.aspx