Android-- 通过setContentView切换Activity的View,保存动态修改后的视图

Android 使用setContentView在一个Activity进行界面切换 /** * 使用setContentView在一个Activity * 进行界面的切换 */ public class MyActivity extends Activity { private TextView tv; private View mainView; private View subView; @Override public vo 阅读详情
使用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:

<?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的值被保存了,还是"已修改"
}

};
}

Android Activity数据保存与横竖屏切换处理指南 Activity是Android应用的核心组件,其生命周期管理直接影响用户体验。当设备配置变更如横竖屏切换时,系统默认会重建Activity实例,导致临时数据丢失。理解onSaveInstanceState机制和ViewModel等架构组件的工作原理,能够有效解决这一问题。通过Bundle保存简单数据、实现Parcelable接口处理复杂对象,结合LiveData实现数据观察,开发者可以构建更稳定的应用。这些技术在表单数据保存、游戏状态恢复等场景中尤为重要,是提升Android应用质量的关键实践。 阅读详情

相关推荐

Activity使用setContentView切换界面

Activity使用setContentView切换界面

android 通过setContentView切换Activity的View

完全转载

aknew123的博客 714

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1306

切换Activity中布局的setContentView( )方法

setContentView(R.layout.main)在Android里面,这句话是什么意思? R.layout.main是个布局文件即控件都是如何摆放如何显示的,setContentView就是设置一个Activity的显示界面,这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局 使用setContentView可以在Activity中动态切

大菜的技术博客 2612

USB-Blaster在Win11报错?3分钟搞定驱动兼容性问题(Quartus 21.4实测)

本文针对Windows 11系统下USB-Blaster驱动安装问题,提供了一套快速解决方案。通过优化驱动安装流程、绕过签名验证及设备管理器高级技巧,帮助开发者在3分钟内解决Quartus 21.4的兼容性问题,提升FPGA调试效率。

weixin_30772105的博客 292

Lucene学习总结之二:Lucene的总体架构

Lucene总的来说是: 一个高效的,可扩展的,全文检索库。 全部用Java实现,无须配置。 仅支持纯文本文件的索引(Indexing)和搜索(Search)。 不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in action中,Lucene 的构架和过程如下图, 说明Lucene是有索引和搜索的两个过程,包

forfuture1978的专栏 1万+

android 通过setContentView切换Activity的View,保存动态修改后的视图

使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。但是,在android SDK给我们建的默认的Hello World程序中,调用的是setContentView(int layoutResID)方法,如果使用该方法切换view,在切换后再切换回,无法

繁小华的专栏 1670

基于Halium 9为小米平板4移植Ubuntu Touch:内核适配与驱动调试实战

在移动设备生态中,Linux内核作为核心,通过硬件抽象层(HAL)管理底层硬件驱动,为上层系统提供统一接口。其模块化设计允许深度定制,是实现跨平台移植的技术基础。Halium项目正是利用这一原理,构建了一个中间层,将安卓内核的硬件支持能力“翻译”成标准Linux发行版能识别的格式,从而在手机、平板等移动设备上运行Ubuntu Touch、postmarketOS等移动Linux系统,极大地拓展了老旧设备的再利用价值。这一技术为开发者提供了在常见安卓硬件上进行Linux系统开发与定制的可能,尤其在嵌入式与物联

weixin_42639246的博客 372

Android学习笔记03: 通过setContentView切换Activity的View,保存动态修改后的视图

http://www.pocketdigi.com/20110509/269.html

大象Jepson的专栏 541

Windows/Mac/Linux三系统保姆级教程:用llama.cpp将safetensors模型转gguf格式(附常见错误解决)

本文提供Windows、Mac和Linux系统下使用llama.cpp将safetensors模型转换为gguf格式的详细教程,涵盖环境配置、转换原理及常见错误解决方案。通过跨平台兼容性处理,帮助开发者高效完成模型格式转换,优化边缘计算性能。

weixin_29227425的博客 270

Apollo EM Planner中路径-速度解耦优化的数学建模与仿真分析

摘要 Apollo EM Planner采用路径-速度解耦优化策略解决自动驾驶运动规划问题。该算法将时空轨迹规划分解为路径规划和速度规划两个子问题:首先在静态环境下生成几何最优路径,再优化沿路径的速度曲线。通过五次多项式表示路径和速度,构建包含平滑性、安全性、舒适性的多目标优化函数,并引入弹性模型处理动态障碍物约束。算法具有解耦优化、弹性适应、实时求解等特点,适用于高速公路、城市交叉口等多种场景。数学建模包括路径几何优化、速度动态优化和弹性势能函数,最终生成满足车辆动力学和环境约束的安全轨迹。

走向CTO的路上... 933

setContentView

public void setContentView(int layoutResID) Since: API Level 1 Set the activity content from a layout resource. The resource will be inflated, adding all top-level views to the activity.

fay8048的博客 809

人工智能面试总结-Python

B站:啥都会一点的研究生 公众号试读:啥都会一点的研究生 目录说说Python程序运行过程?说说Python的作用域?说说Python的数据结构?说说Python中可变与不可变类型?说说进程与线程?说说Python中的多线程?说说Python中的多进程?说说Python互斥锁与死锁?说说Lambda?说说Python的深拷贝与浅拷贝?说说Python多线程是否能用多个CPU,为什么?说说Python垃圾回收机制?说说Python里的生成器?说说迭代器与生成器的区别?说说Python 列表的 del,rem.

啥都生的博客 1万+

使用setContentView可以在Activity中动态切换显示的View

setContentView(R.layout.main)在Android里面,这句话是什么意思? R.layout.main是个布局文件即控件都是如何摆放如何显示的,setContentView就是设置一个Activity的显示界面,这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局 使用setContentView可以在Activity中动态切

zhjr1220的专栏 2737

YOLOv11改进 | 特殊场景改进篇 | 2024最新改进CPA-Enhancer链式思考网络(适用低照度、图像去雾、雨天、雪天)

本文给大家带来的改进机制是2024.3月份最新改进,由CPA-Enhancer: Chain-of-Thought Prompted Adaptive Enhancer for Object Detection under Unknown Degradations论文提出的CPA-Enhancer链式思考网络CPA-Enhancer通过引入链式思考提示机制,实现了对未知退化条件下图像的自适应增强。该方法的核心在于能够利用CoT提示对图像退化进行动态分析和适应,从而显著提升物体检测性能。

Snu77的博客 2014

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓 setContentView使用

setContentView(R.layout.main)在android代码里经常能看见, R.layout.main是个布局文件即控件,设置如何摆放如何显示的,setContentView就是设置一个Activity的显示界面, 这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局 使用setContentView可以在Activity中动

dahuzi的专栏 2946

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Android setContentView 实现同一个activity下不同view的切换

Android setContentView 实现同一个activity下不同view的切换 Android 中实现不同activity的切换很简单,只要设置intent就行了,但是同一个activity中实现不同view的切换还是需要一点知识的。 其实也很简单只要在要切换的地方加上一下两句就可以了。 LayoutInflater inflater = ( Layou

快慢机的地盘 2472

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

setContentView( )方法

setContentView(R.layout.main)在android代码里经常能看见, R.layout.main是个布局文件即控件,设置如何摆放如何显示的,setContentView就是设置一个Activity的显示界面, 这句话就是设置这个这句话所再的Activity采用R.layout下的main布局文件进行布局 使用setContentView可以在Activity中动态

ydt_lwj的专栏 9029

Android 使用setContentView来实现Acitivity的跳转

最近几天在看一些专家的博客,刚好看到这样一篇文章,所以自己也做了一个demo来试了试,所以写一篇博客来加深一下印象。 直接上代码   private Button btn_first; private Button btn_second; private Boolean flag=true; private View A; private View B; @Overr

2583

Android开发入门:从MainActivity理解Activity生命周期与视图绑定

Activity是Android应用的基本组成单元,可以将其理解为应用中的独立界面或“房间”。每个Activity都拥有自己的生命周期,系统通过调用onCreate、onStart、onResume、onPause、onStop和onDestroy等回调方法来管理其创建、可见、交互和销毁过程。理解生命周期对于资源管理、状态保存和用户体验优化至关重要,是避免内存泄漏和应用崩溃的基础。在技术实现上,通过setContentView方法可以将XML布局文件与Activity关联,而使用findViewById或更

cigang4063的博客 338

Scoops:Android动态主题切换库完全指南 - 实现应用主题实时切换的终极解决方案

想要为你的Android应用添加动态主题切换功能吗?Scoops库是你的完美选择!这款强大的Android动态主题切换库让应用主题实时切换变得简单易行,支持多种预定义主题和动态颜色属性更新。无论你是新手开发者还是经验丰富的工程师,Scoops都能帮助你快速实现专业级的主题切换功能。 ## 🚀 为什么选择Scoops动态主题切换库? Scoops是一个专为Android应用设计的动态主题管理库

gitblog_00460的博客 1003

两个Activity之间切换时UI部分重叠

setContentView就是设置一个Activity的显示界面,使用setContentView可以在Activity中动态切换显示的View,这样,不需要多个Activity就可以显示不同的界面,因此不再需要在Activity间传送数据,变量可以直接引用。android studio自动生成的SecondActivity.kt中自动生成的代码中已经绑定了second_layout.xml的布局资源,通过代码:setContentView(R.layout.second_layout)实现。

felicity_one的博客 869
上一篇: Android--关于inflate()方法
下一篇: Android--SQLite学习及使用方法
AiHubMax
博客等级 码龄15年 27粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值