android 通过setContentView切换Activity的View,保存动态修改后的视图
2014-04-24 21:48
381 查看
使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int
layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
下面是代码,main.xml:
main2.xml:
layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法显示切换前修改后的样子,也就是说,相当于重新显示一个view,并非是把原来的view隐藏后再显示。其实setContentView是个多态方法,我们可以先用LayoutInflater把布局xml文件引入成View对象,再通过setContentView(View view)方法来切换视图。因为所有对View的修改都保存在View对象里,所以,当切换回原来的view时,就可以直接显示原来修改后的样子。
下面是代码,main.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/tv1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="main.xml" /> <Button android:id="@+id/b1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="切换到main2.xml" /> <Button android:id="@+id/b3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="修改tv1" /> </LinearLayout>
main2.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/tv2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="main2.xml" /> <Button android:id="@+id/b2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="切换到main.xml" /> </LinearLayout>
Java 代码:
点击打开链接package com.pocketdigi.changeView; import android.app.Activity; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { /** Called when the activity is first created. */ TextView tv1, tv2; Button b1, b2,b3; View layout1, layout2; boolean view2Load=false;//main2是否载入过的flag @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //LayoutInflater inflater = getLayoutInflater(); LayoutInflater inflater = LayoutInflater.from(this); //以上两行功能一样 layout1 = inflater.inflate(R.layout.main, null); layout2 = inflater.inflate(R.layout.main2, null); setView1(); tv1 = (TextView) findViewById(R.id.tv1); b1 = (Button) findViewById(R.id.b1); b3 = (Button) findViewById(R.id.b3); b3.setOnClickListener(l3); b1.setOnClickListener(l1); //控件及监听器只需一次查找绑定,切换view不影响 } private void setView1() { setContentView(layout1); //切换到main } private void setView2() { setContentView(layout2); //切换到main2 find(); } private void find(){ if(!view2Load){//如果首次显示main2,查找main2里的控件并绑定监听器 tv2 = (TextView) findViewById(R.id.tv2); b2 = (Button) findViewById(R.id.b2); b2.setOnClickListener(l2); view2Load=true;//flag设为true } } OnClickListener l1 = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub setView2(); } }; OnClickListener l2 = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub setView1(); } }; OnClickListener l3 = new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub tv1.setText("已修改"); //修改tv2的值,切换到main2后再切换回来,可以发现tv1的值被保存了,还是"已修改" } }; }
转载出处:http://www.pocketdigi.com/20110509/269.html
相关文章推荐
- Android-- 通过setContentView切换Activity的View,保存动态修改后的视图
- Android-- 通过setContentView切换Activity的View,保存动态修改后的视图
- android 通过setContentView切换Activity的View,保存动态修改后的视图
- Android学习笔记03: 通过setContentView切换Activity的View,保存动态修改后的视图
- Android编程动态创建视图View的方法
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
- Android中通过Tag为View保存数据绑定数据
- 动态调整Android surfaceView 视图上下层问题
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
- android 通过Camera和Surfaceview实现照相 图片预览 保存图片到本地 手动聚焦 FaceDetectionListener实现人脸识别
- Android中图片处理(压缩 保存 显示 截屏 视图View转为图片Bitmap)函数工具类
- Android 通过Java代码生成创建界面。动态生成View,动态设置View属性。addRules详解
- android一个动态添加删除网格视图的demo,可把状态保存在数据库中
- Android视图绘制流程完全解析,带你一步步深入了解View(二) ---站在巨人的肩膀上学习总结
- 通过View.post()获取View的宽高引发的两个问题:1post的Runnable何时被执行,2为何View需要layout两次;以及发现Android的一个小bug
- Android通过注解初始化View
- Android菜鸟练习第十一课 双击放大缩小也可以通过手势改变大小的ZoomImageView
- Android 动态设置View 的问题
- android 通过设置cookie解决app 登录后WebView还要重新登陆问题
- Web逆向之通过Android中WebView获取网站视频真实链接