如题,在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();
}
});
}
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();
}
});
}
解决方案 »
- 单独编译android frameworks,报错
- 请教Android布局管理器简单问题:@+id/ok
- 求助Android中的C程序的内存空间分配的问题
- 在一个继承自View的类中重写onKeyDown()方法无效?
- 新手提问在线等
- android HttpURLConnection GPRS 申请数据不成功
- 急 android拍照上传空指针
- 自定义控件重绘没有效果
- 利用monkeyrunner在PC上开发一款自动化测试工具
- 关于输入框的问题,请大神帮忙看下
- 我的getView初始化被调用了两次,
- GraphicBufferAlloc::createGraphicBuffer (android 4.0)
public void setContentView (int layoutResID)应该使用
public void setContentView (View view)在OnCreate时,你需要首先把layout资源变为View对象。
可以看看LayoutInflater
1.setContentView (int layoutResID)会创建一个新的对象,是不是意味着有创建了一个activity?
2.那原来的那个view对象绑定的activity是否还有可能在task栈上呢?若可能的话是不是长久下去此方法会引起系统资源紧张?望继续给小弟解惑,谢了
View viewa = flater.inflate(R.layout.a, null);
View viewb = flater.inflate(R.layout.b, null);
public class A extends Activity {
public void onCreate(Bundle savedInstanceState) {
...
Button01.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v)
{
jumpToLayoutb();
}
});
LayoutInflater flater = this.getLayoutInflater();
View viewa = flater.inflate(R.layout.a, null);
View viewb = flater.inflate(R.layout.b, null);
...
}
package com.zc.viewchange;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;public class ViewChange extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
Window myWindow = this.getWindow();
myWindow.setFlags(flag, flag);
setContentView(R.layout.main);
Button b1=(Button) findViewById(R.id.btn1);
b1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
jumpView2();
}
});
}
public void jumpView2()
{
setContentView(R.layout.view2);
Button b2 = (Button) findViewById(R.id.btn2);
b2.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
jumpView1();
}
});
}
public void jumpView1()
{
setContentView(R.layout.main);
Button b1 = (Button) findViewById(R.id.btn1);
b1.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v)
{
jumpView2();
}
});
}
}
http://blog.csdn.net/dyw/archive/2010/09/28/5912011.aspx
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class ActivityTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main2);
Log.d("avtivity","onCreate()");
LayoutInflater inflater = getLayoutInflater();
final View main = inflater.inflate(R.layout.main,null);
final View main2 = inflater.inflate(R.layout.main2,null);
Button btn1=(Button)main.findViewById(R.id.btn1);
btn1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("Activity","press btn1");
setActivityView(main2);
} });
Button btn2=(Button)main2.findViewById(R.id.btn2);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("Activity","press btn2");
setActivityView(main);
}
}); //setContentView(R.layout.main);
setActivityView(main);
}
public void setActivityView(View view)
{
this.setContentView(view);
}
}这样是可以的,感觉主要是要把setContentView()的参数改成view,不能用id
完整下载