【从头学android】第二个程序同一个Activity中,切换布局时监听器失效解决方法1
来源:互联网 发布:网络舆情监测员职责 编辑:程序博客网 时间:2024/03/29 20:29
1.java程序
/** * */package com.itest;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * @author Robin */public class ITestP1Activity extends Activity {Button b1;Button b2;/** Called when the activity is first created. */@Overridepublic void onCreate( Bundle savedInstanceState ){super.onCreate( savedInstanceState );setContentView( R.layout.p11 );//查找控件b1 = (Button) findViewById( R.id.button1 );//设置监听b1.setOnClickListener( new OnClickListener() {@Overridepublic void onClick( View v ){jumpToDevicelistB1();}} );}void jumpToDevicelistB1(){setContentView( R.layout.p12 );//查找控件b2 = (Button)findViewById( R.id.button1 );//设置监听b2.setOnClickListener( new OnClickListener() {@Overridepublic void onClick( View v ){jumpToMainB2();}});}void jumpToMainB2(){setContentView( R.layout.p11 );//必须重新查找控件,否则监听不生效b1 = (Button) findViewById( R.id.button1 );//必须重新设置监听b1.setOnClickListener( new OnClickListener() {@Overridepublic void onClick( View v ){jumpToDevicelistB1();}} );}}
2.p11.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/textView1" android:text="p11"android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/changeText"></Button></LinearLayout>
3.p12.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/textView1" android:text="p12"android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView><Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/changeText"></Button></LinearLayout>
需要注意的是
1.在同一个Activity里切换布局容易出现控件监听失效的问题
原因是setContentView(int)方法是从布局文件中重新载入,所有动态设定都会失效。
解决方法重新执行oncreate里的方法进行初始化。
代码简化如下:
/** * */package com.itest;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;/** * @author Robin */public class ITestP1Activity extends Activity {Button b1;Button b2;/** Called when the activity is first created. */@Overridepublic void onCreate( Bundle savedInstanceState ){super.onCreate( savedInstanceState );initP11();}void initP11(){setContentView( R.layout.p11 );// 查找控件b1 = (Button) findViewById( R.id.button1 );// 设置监听b1.setOnClickListener( new OnClickListener() {@Overridepublic void onClick( View v ){initP12();}} );}void initP12(){setContentView( R.layout.p12 );// 查找控件b2 = (Button) findViewById( R.id.button1 );// 设置监听b2.setOnClickListener( new OnClickListener() {@Overridepublic void onClick( View v ){initP11();}} );}}
2.上述代码切换布局的时候会丢失对布局的动态修改(即切换后载入的是原始布局)
原因同上
解决办法使用setContentView(View)下个帖子中见详情。
- 【从头学android】第二个程序同一个Activity中,切换布局时监听器失效解决方法1
- 2、从头学Android之第一个Activity程序
- 2、从头学Android之第一个Activity程序
- Android 同一个页面中切换布局
- 【从头学android】在两个Activity之间实现界面切换
- 【从头学android】在两个Activity中传递参数
- Android中Activity的简单布局切换
- 同一个activity中通过一个按钮切换两个不同的布局
- 3、从头学Android之Activity生命周期
- 从头开始学一个android activity
- 3、从头学Android之Activity生命周期
- 【从头学android】使用setContentView(View)替换setContentView(int),这样切换布局就可以保留切换前的状态啦
- 【从头学android】从新的Activity中返回数据给前一个Activity
- android 布局切换(Activity切换)1-利用ActivityGroup
- 12、从头学Android之布局之TableLayout表格布局
- 12、从头学Android之布局之TableLayout表格布局
- android笔记5——同一个Activity中Fragment的切换
- android 同时使用多个checkbox使用同一个状态监听器
- android SQLite数据库
- android 四大重要的组件之ContentProvider
- git初步使用之push 错误:fatal: The remote end hung up unexpectedly
- linux mint 12 挂载移动硬盘后的移除问题
- Ubuntu11.10下编译安装vim7.3&vimgdb
- 【从头学android】第二个程序同一个Activity中,切换布局时监听器失效解决方法1
- Java定时任务的实现
- vim 编码方式(encoding、fileencoding、fileencodings、termencoding) 详解
- Java对象存储到Oracle数据库
- 如何在RHEL6上配置PAM LDAP认证(How to setup LDAP Authentication for PAM on RHEL6 x86_64)
- 用drip工具测试并解决ie window.open 带来的内存泄漏
- Android四个重要的组件BroadcastReceiver
- jquery.ui防止重复提交工具类
- windows Xp IE内存泄露,IE重复打开窗口后,窗口白屏, 速度变慢解决办法