Android与 MVC设计模式&activity的生命周期

macOS 12.7.6部署Ollama+Dify避坑指南 本文介绍了在macOS 12.7.6系统下部署Ollama和Dify的详细步骤及避坑指南。主要内容包括:1)关闭系统完整性保护(SIP)以允许修改系统目录;2)安装特定版本的Docker(2.1.0.5)和docker-compose(v2.38.2)以避免兼容性问题;3)配置Ollama服务并下载nomic-embed-text和deepseek-r1:7b模型;4)针对macOS调整Dify的docker配置文件,包括延长超时时间、修改存储路径、增加资源限制等关键设置。文中提供了完整的命令操作步骤和配置 阅读详情

仍然接着以上篇的项目工程为例进行学习总结。

一.创建新类

在项目工具窗口中,右键单击com.bignerdranch.android.geoquiz类包,选择New → Java Class 菜单项,并填入类名。

例:添加一个Question类

public class Question {

    private int mTextResId;     

private boolean mAnswerTrue;

    public Question(int textResId, boolean answerTrue){   

mTextResId = textResId;   

mAnswerTrue = answerTrue;     

}

}

Question类中封装两部门数据:问题文本和问题答案(true或false)。mTextResId是int类型的原因是因为变量mTextResId用来保存地理知识问题字符串的资源ID,而资源ID总是int类型。

新增的两个变量可设置由Android Studio自动 生成getter方法与setter方法。

目前为止,本应用各个类协同工作如下图所示:

 

二.Android与 MVC设计模式 

MVC(Model-View-Controller):基于模型-视图-控制器。MVC设计模式表明,应用的任何对象, 归根结底都属于模型对象、视图对象以及控制器对象中的一种。

模型对象存储着应用的数据和业务逻辑。模型对象不关心用户界面,它为存储和管理应用数据而生。

视图对象知道如何在屏幕上绘制自己,以及如何响应用户的输入,如触摸动作等。一个 简单的经验法则是,凡是能够在屏幕上看见的对象,就是视图对象。

控制器对象含有应用的逻辑单元,是视图对象与模型对象的联系纽带。控制器对象响应 视图对象触发的各类事件,此外还管理着模型对象与视图层间的数据流动。

  

至此我们可以继续更新视图层添加视图对象。如添加一个按钮:

       <Button   android:id="@+id/next_button"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:text="@string/next_button" />

同时给按钮添加字符串资源以及对问题字符串进行更新。

如同之前一样,接下来为按钮设置监听器:

           mNextButton = (Button) findViewById(R.id.next_button);   mNextButton.setOnClickListener(new View.OnClickListener() {   

@Override   

public void onClick(View v) {    

mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;    

int question = mQuestionBank[mCurrentIndex].getTextResId();    mQuestionTextView.setText(question);  

 }   

});  

现在,更新mQuestionTextView变量的相同代码分布在两个不同的地方,可以把公共代码放在单独的私有方法里,然后在mNextButton监听器里以及onCreate (Bundle)方法的末尾分别调用它,以初步设置activity视图中的文本。

 

再在QuizActivity.java文件中,QuizActivity类下,添加checkAnswer(boolean)方法。

      private void checkAnswer(boolean userPressedTrue) {   

boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();

         int messageResId = 0;

  if (userPressedTrue == answerIsTrue) {   

messageResId = R.string.correct_toast;   

} else {   

messageResId = R.string.incorrect_toast;   

}

  Toast.makeText(this, messageResId, Toast.LENGTH_SHORT) .show();  

}

三.添加图标资源

   选择并复制图片目录,然后粘贴到Android Studio的app/src/main/res目录中。完成后,在Android Studio的项目工具窗口,就可以看到这些目录。任何添加到res/drawable目录中、后缀名为.png、.jpg或者.gif的文件都会自动获得资源ID。

在XML文件中引用资源。在XML资源文件中,通过资源类型和资源名称,可引用其他资源。以@string/开头的定义 是引用字符串资源。以@drawable/开头的定义是引用drawable资源。

四.activity的生命周期

   状态图解:

 

Activity的状态:

 

任何时候只能有一个 activity处于用户能交互的运行状态。

通常,通过覆盖onCreate(Bundle)方法,activity可以预处理以下UI相关工作: q   实例化组件并将它们放置在屏幕上(调用setContentView(int)方法) ; q   引用已实例化的组件; q

 为组件设置监听器以处理用户交互; q

访问外部模型数据。

五.日志跟踪理解 activity生命周期

   输出日志信息:

public static int d(String tag, String msg)

d代表“debug”,用来表示日志信息的级别。第一个参数是日志的来源,第二个参数是日志的具体内容。第一个参数通常以类名为值的TAG常量传入。这样,就很容易看出日志信息的来源。

在QuizActivity.java中新增一个TAG常量:

private static final String TAG = "QuizActivity";

再为onCreate(Bundle)方法添加日志输出代码:

           

   接下来,在QuizActivity类的onCreate(Bundle)之后,覆盖其他五个生命周期方法。

   

注意:首先调用超类计算方法,再调用其他方法。

应用运行时,可以使用LogCat工具查看日志。

六.设备旋转与 activity生命周期

   旋转设备会改变设备配置(device configuration)。设备配置实际是一系列特征组合,用来描述设备当前状态。这些特征有:屏幕方向、屏幕像素密度、屏幕尺寸、键盘类型、底座模式以及语言等。为匹配不同的设备配置,应用会提供不同的备选资源。

   在运行时配置变更(runtime configuration change)发生时,可能会有更合适的资源来匹配新的设备配置。于是,Android销毁当前activity,为新配置寻找佳资源,然后创建新实例使用这些资源。

   所以这就要创建水平模式布局。右键单击res目录后选择New → Android resource directory菜单项,从资源类型(Resource type) 列表中选择layout,保持Source set的main选项不变。接下来选中待选资源特征列表中的Orientation,然后单击>>按钮将其移动至已选资源特征 (Chosen qualifiers)区域。 最后,确认选中Screen orientation下拉列表中的Landscape选项,并确保目录名(Directory name)显示为layout-land。从res/layout目录复制activity_quiz.xml文件至res/layout-land目录,并修改代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

<TextView
        android:id="@+id/question_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:padding="24dp"
        
/>

    <LinearLayout
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_gravity="center_vertical|center_horizontal"
        android:orientation = "horizontal"
>

        <Button
            android:id="@+id/true_button"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:layout_gravity="bottom|right"
            android:text = "@string/true_button"
/>

        <Button
            android:id="@+id/false_button"
            android:layout_width = "wrap_content"
            android:layout_height = "wrap_content"
            android:text = "@string/false_button"
/>

</FrameLayout>

但是现在设备旋转后还是回到第一题,所以下面要做的就是保存数据,即旋转后新建的QuizActivity需要知道mCurrentIndex变量的原值。覆盖以下Activity 方法就是一种解决方案:

 protected void onSaveInstanceState(Bundle outState)

     设置一个KEY_INDEX ,在它不为null时,旋转之后也显示当前正在回答的问题。

 

   

 

 

 

 

 

 

 

 


Xilinx FPGA平台GTX简易使用教程(汇总篇) Xilinx平台GTX简易使用教程,先“知其然”,慢慢再研究“所以然”。 阅读详情

相关推荐

【论文精读】Latent Diffusion

Latent Diffusion

weixin_44934783的博客 4478

Android开发之MVP模式

MVP模式是MVC模式在Android上的一种变体,要介绍MVP就得先介绍MVC。在MVC模式中,Activity应该属于view这一层,而在实际开发中,它既承担了view层,又包含了一些controller的东西。这对于开发与维护来说,都是不太友好的,耦合度太高。现在,把Activity中的View和Controller抽离出来就变成了View和Presenter,这就是MVP模式。 MVC模式M

小洋人最happy的专栏 1129

从格雷码到多频外差:结构光相位展开实战指南(附Python仿真代码)

本文深入探讨了结构光三维测量中的相位展开技术,重点对比了格雷码和多频外差法在工业检测、逆向工程等领域的应用。通过详细的原理图解和Python仿真代码,展示了两种方法在精度、抗噪性和适用场景上的差异,为实际工程中的技术选型提供实用指南。

weixin_42535703的博客 435

android mvc 架构,Activity(一):MVC模式架构篇

都是项目过程中曾经遇到问题,查看过相关资料,现在整理下思路,当时遇到的问题,已经如何解决。这是重温系列第一篇,第一个想到Activity,主要有Activity启动模式,生命周期,屏幕旋转生命周期变化,回收状态保持,安全退出allActivity后重启。在说具体Activity知识点之前,想先谈谈自己对Activity在android的重要性的理解,在MVC模式中的角色。MVC (Model-Vi...

weixin_29102619的博客 806

Win7/Win10双系统兼容指南:Arduino IDE 1.8.19与2.3.2的安装避坑全攻略

本文详细解析了在Win7/Win10双系统环境下安装和配置Arduino IDE 1.8.19与2.3.2版本的完整指南,特别针对ESP32开发环境的深度配置和COM端口常见问题提供了实用解决方案。通过版本对比、安装优化和性能调优,帮助开发者高效搭建稳定的物联网开发环境。

weixin_30500105的博客 188

单精度浮点数存储、双精度浮点数存储

单精度浮点数存储、双精度浮点数存储

fancynthia的博客 1316

Android编程权威指南第五章学习

第五章—第二个activity 5.1.1 创建新的 activity 创建新的activity至少涉及三个文件: Java类、 XML布局和应用的manifest文件。这三个文 件关联密切,搞错了就是灾难。因此,强烈建议使用Android Studio的新建activity向导功能。 在项目工具窗口中,右键单击com.bignerdranch.android.geoquiz包,选择New → A...

weixin_43175029的博客 767

突破限制:巧用Azure OpenAI,畅玩Gemini模型

通过 Azure OpenAI 服务这一巧妙的途径,间接调用 Gemini 模型,打破网络限制的壁垒。本文将详细介绍这一方法,无论你是人工智能领域的新手,还是经验丰富的开发者,都能从中获取实用的技巧,轻松开启 Gemini 模型的探索之旅

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 181

Linux 中文 man 手册安装指南:从查找机制到实战配置

man 手册是 Linux/Unix 系统中最权威的本地文档体系,按 man1 到 man8 分章节组织,内容与系统版本严格对应。然而默认英文界面让许多刚接触 Linux 的运维或开发人员阅读缓慢,转而依赖网络搜索,却常因版本差异引入错误。理解 man 的查找原理是解决问题的关键:手册按“语言-章节-文件名”三级目录存储,基于 locale 与 MANLANG 决定优先语言,MANPATH 指定搜索路径。只有弄清这套机制,才能避免“装了中文包却仍显示英文”的困惑。中文 man 项目(如 manpages-z

weixin_33778544的博客 501

【地图模块算法】二维全局地图的开源方案及对比--gmapping、hector、karto、cartographer

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、gmapping算法建图【基于Raoo-Blackwellized粒子滤波(RBPF)算法】1.gmapping理论(1)gmapping的工作原理(2)gmapping的算法流程(3)gmapping论文理论2.gmappingROS工程框架解析(1)gmapping的功能包架构(2)gmapping订阅和发布的话题(3)gmapping算法建图参数(4)gmapping源码

qq_35635374的博客 3438

RDKit | 基于Murcko骨架聚类化合物库

化合物多样性评估 一种方法是使用合适的指纹技术将化合物矢量化并评估他们之间的距离。这种方法经常被使用,但是对于人类很难直观地理解化合物之间的距离。 基于Murcko骨架,分子大致聚集在化合物骨架中,并且每个簇中的顶部化合物都作为候选化合物。此方法非常符合人类的直觉,因此可以预期人将通过查看候选化合物列表来自动缩小化合物的范围。 Murcko骨架 Mur...

DrugOne 3767

Activity生命周期的设计模式:模板方法

1、创建一系列子类去执行一组相同的流程方法。 2、你需要声明一个抽象类,包含一个模板方法‘ 3、在此模板方法中需要调用一系列流程方法,并且所欲的子类都需要调用。 4、子类可以重写某一个或多个流程方法。

fang410103的博客 813

6万字嵌入式最全八股文面试题大全及参考答案(持续更新)

进程上下文定义:进程上下文包含了进程执行时所需的所有信息,包括 CPU 寄存器的值、内核栈、任务控制块(TCB)等。作用:当进程被切换时,需要保存当前进程的上下文,并恢复下一个将要运行进程的上下文。中断上下文定义:中断上下文是指处理中断时 CPU 所处的状态,包括中断发生时的寄存器值等。作用:当中断发生时,CPU 会自动保存当前的上下文信息,并跳转到相应的中断处理程序。示例表格上下文描述进程上下文包含进程执行时的所有相关信息中断上下文处理中断时 CPU 所处的状态线程同步定义。

大模型大数据攻城狮的专栏 7932

Activity和android的mvc模式

Activity是Android系统中的四大组件之一,可以用于显示View。Activity是一个与用户交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了,还要知道结合android的设计模式。 下面我就先来介绍一下MVC在Android开发中的应用:   M(Model 模型):M...

353

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android编程: MVC模式、应用的生命周期

学习内容:Android的应用剖析、MVC模式、应用的生命周期 ====Android的应用剖析==== 一个Android应用程序会使用如下组件: Android Activities      界面 Android Intents       发送消息 Broadcast Intents      广播消息 Broadcast Receivers     接受广播 An...

weixin_30702413的博客 132

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ModeMVC:在activity中堆代码就叫做MVC吗?

首先,看看这是不是自己 现在Android编程中如果在你没有特别认真设计框架,没有认真考虑面向对象的六大原则对编程重要性的时候,我们一般都是认为自己使用的是MVC的框架模式。但是你使用的真的是MVC吗?还是只是单纯的在activity中堆代码?如果是后一种情况,那么MVC框架的M,V,C这三层到底体现在哪呢?难道这三层都体现在了activity中吗?如果是这样,那么我们也只是在单纯的堆代码… M...

Nothing 352

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android MVC模式你真的明白了吗??

(一)MVC是什么?    MVC全称是Mode --View--Controller(模型--视图--控制器),是一种非常经典的应用设计思路,MVC将业务逻辑、数据与界面显示分离,真正实现了代码的高内聚低耦合。         Model(模型对象)         是应用的主体部分,所有的业务逻辑都应该写在该层。         View(视图对象)         是应用程序中负责

j_赵家人的博客 4373

android中mvc以及intent和activity应用解析

/**************************************************/ >android的mvc以及activity之间的关系和android中的intent应用 /**************************************************/ >0.是怎么感觉到android的mvc的 /************************

zyb243380456的专栏 1068

Android与MVC设计模式

Android与MVC设计模式 写在前面,之前做过一段时间移动开发,后来因为工作原因搁浅了,最新重新拿起Android权威编程指南学习,顺道做个学习笔记。 首先呢,我想说无论是计算机科班出身还是培训班出身,都听说过高内聚低耦合以及MVC这两个词。MVC模式就是为了解决软件工程过程中内聚与耦合的关系。(维基中查看内聚 耦合的定义) MVC模式(...

三分自留地 435

Android之MVC设计模式在Android中的使用

最近一直在想怎么去优化一下现有的项目的代码和框架,项目中代码的臃肿和繁多在修改需求的时候带来了非常大的不方便,在大的项目工程中,一个好的框架,好的设计模式,能减少很大的工作量,所以最近一直在深入的学习MVC和MVP设计模式,这一篇对对于MVC的介绍非常的简单明了,想学习MVC设计模式的可以看看,欢迎有心得的相互交流,相互学习。 原文地址:http://www.2cto.com/kf/2015

碎火流荧的博客 1732

【实验四】 Activity的创建及生命周期

实验四 Activity的创建及生命周期 一、实验目的1.掌握Activity的创建步骤;2.掌握Activity的生命周期的切换;3.掌握Activity的实际应用;二、实验内容1. Activity的创建:创建一个Activity,名字为Activity01(1)定义一个Activity01类(2)创建main.xml文件,在xml文件中添加一个TextView控件,并在TextView控件中...

长颈鹿的专栏 1503

GeoQuiz总结

GeoQuiz项目完成后的一些总结与感悟: 首先我们先来总结总结这次项目所完成的一个过程吧!可能有些人认为项目做完就做完了,下次也不可能再做到一样的项目了。 就我个人而言我并不反对这些人的观点,所以我今天所做的总结并不是简简单单的过程总结,更多的是其中所学到的知识的一 个总结。 我们Android开发初体验的一个应用是GeoQuiz——它能给出一道道地理知识问题(地理问题都是英文的,...

weixin_30363817的博客 273

Android开发框架模式(MVC、MVP、MVVM)实例解析

Android项目中,尤其是比较大型的项目开发中,模块内部的高聚合和模块间的低耦合性就显得尤为重要了。所以我们一般情况下需要为项目设计一种框架模式,通常情况下我们一般用到的三种MVC、MVP、MVVM。 通过框架模式设计的项目能够极大的提高开发效率,提高项目的可维护性和可扩展性,另外在模块测试及问题定位上也提供了较大的便利。 接下来我们就对这三种框架模式一一进行讲解,并会重点讲解下比较常用的MV......

红日 1万+

浅淡 iOS ,android,Asp.Net 关于MVC,MVP,MVVM的总结和思考

架构设计模式MVCMVPMVVMVIPER前三种设计模式都把一个应用中的实体分为以下三类:Models--负责主要的数据或者操作数据的数据访问层,可以想象 Perspn 和 PersonDataProvider 类。Views--负责展示层(GUI),对于iOS环境可以联想一下以 UI 开头的所有类。Controller/Presenter/ViewModel--负责协调 Model 和 View...

u012760848的博客 890

在android当中MVC模式分别代表什么?

      MVC设计模式其实很多人都看过,都了解过,并且网上讲述的也都很简单,但是你真正了解过这种设计模式在你的开发语言下都代表着什么吗?面试过很多开发者,基本没有几个能答上来的,很多人都说自己写过MVVM项目,MVP项目,MVC数不胜数,然而面试官只是问了一句,在Android当中,MVC分别代表什么?反正就是千篇一律的回答,M是MODEL层,V是VIEW层,C是CONTROLLER层,然后就...

AiShengHuo的博客 824

Android MVC设计模式详解

一、MVC原理 MAC是一种非常经典的应用设计思路,MVC将业务逻辑、数据与界面显示分离,真正实现了代码的高内聚低耦合。提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。它主要分Mode --View--Controller(模型--视图--控制器)三层。 一个模型可以有多个视图,一个视图可以有多个控制器,一个控制器也可以有多个模型。  

csdn_aiyang的博客 3409
上一篇: 以一个小程序设计来入门Android
下一篇: Android开发之第二个activity
LittleToMickle
博客等级 码龄10年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值