Activity中recreate方法的应用
參考两篇文章:http://blog.csdn.net/watermusicyes/article/details/47392949
http://blog.csdn.net/droyon/article/details/21275797
recreate能够使用在日间/夜间模式的切换,那么调用recreate()函数将会运行哪些方法呢?
代码:
public class MainActivity extends FragmentActivity implements OnClickListener {
private Button btn;
private int mTheme;
private String THEME = "theme";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
mTheme = savedInstanceState.getInt(THEME);
switchTheme(mTheme);
}
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
Log.e(MainActivity.class.getName(), "onCreate");
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
Log.e(MainActivity.class.getName(), "onSaveInstanceState");
savedInstanceState.putInt(THEME, mTheme);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.e(MainActivity.class.getName(), "onRestoreInstanceState");
}
@Override
protected void onStart() {
super.onStart();
Log.e(MainActivity.class.getName(), "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.e(MainActivity.class.getName(), "onResume");
}
private void switchTheme(int theme) {
switch (mTheme) {
case android.R.style.Theme_Holo_Light:
mTheme = android.R.style.Theme_Black_NoTitleBar;
break;
case android.R.style.Theme_Black_NoTitleBar:
mTheme = android.R.style.Theme_Holo_Light;
break;
default:
mTheme = android.R.style.Theme_Holo_Light;
break;
}
setTheme(mTheme);
}
@SuppressLint("NewApi")
@Override
public void onClick(View v) {
recreate();
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.testandroid.MainActivity" > <Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="recreate" /> </RelativeLayout>
点击recreatebutton能够看到打印相关的信息:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
能够看到这里调用recreate方法会比正常启动Activity多调用了onSaveInstanceState和onRestoreInstanceState。而且onSaveInstanceState在onCreate方法之前调用。
注意:(1)
if (savedInstanceState != null) {
mTheme = savedInstanceState.getInt(THEME);
switchTheme(mTheme);
}
这部分代码要在setContentView(R.layout.activity_main)代码之前调用,否则改变不了主题。
(2)recreate()方法是在Android3.0引入的,所以假设在3.0之前使用会出现错误。例如以下图所看到的:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
Activity中recreate方法的应用的更多相关文章
- 怎样在一个fragment or 随意类中操作还有一个fragment中的方法
1 怎样在acitivty中运行fragment中的方法: 首先获得这个Fragment的对象 xxxFragment fragmentObject = (xxxFragment) getFragme ...
- android 中activity调用远程service中的方法之 aidl的使用
服务端:只有服务,没有界面 1.编写interface文件,复制到 .aidl 文件中,并去掉其中的public 等修饰符.系统会自动在gen目录下生成对应的java文件 (对应本地调用中的接口文件 ...
- android 中activity调用本地service中的方法。
1.自定义一个接口,暴露服务中的方法 public interface IService { /**服务中对外暴露的方法 */ void methodInService();} 2.自定一 ...
- ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法
如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法!!!
在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...
- Activity中Menu相关的几个方法的调用时机
用于创建菜单的常用的方法有如下两种: 1.onCreateOptionsMenu(Menu menu) 2.onPrepareOptionsMenu(Menu menu) MyDiaryActivit ...
- Android中Activity全局共享方法AppContext
在 android 的所有 activity 中共享同一个对象实例的方法 1. 新建 AppContext.java 文件(名称可自定义) public class AppContext extend ...
- Android查缺补漏(View篇)--在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0?
在 Activity 的 onCreate() 方法中为什么获取 View 的宽和高为0 ? @Override protected void onCreate(Bundle savedInstanc ...
- 在Activity中响应ListView内部按钮的点击事件的两种方法
转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题:如何在Activity中响应ListView内部按钮的点击事件,不要在 ...
随机推荐
- BZOJ 1927 最小费用流问题
From lydrainbowcat //By SiriusRen #include <queue> #include <cstdio> #include <cstrin ...
- POJ 3668 枚举?
枚举两点,算一下斜率 sort一遍 判个重 输出解 25行 搞定- //By SiriusRen #include <cmath> #include <cstdio> #inc ...
- metasploit.meterpreter学习笔记(博主推荐)
Metasploit学习笔记(博主推荐) 继续上面的博客 metasploit.meterpreter的基本使用: 首先来获取当前系统(即xp)下的正在运行的一些进程 获得进程之后,我们通过migra ...
- Metasploit渗透测试实验报告
Metasploit渗透测试实验报告
- 使用Chrome浏览器,让我们远离(所有)广告
你是否还在为浏览网页时各种广告霸屏而急躁不安?这里分享一个小技巧,如何自动屏蔽各大广告. 这里使用的浏览器是Chrome,直接在Chrome网上应用商店搜索下载安装AdBlock插件(不知道其它浏览器 ...
- 003.ES2015和ES2016新特性--类.md
JavaScript使用的是基于原型的OO模型,用对象字面量或者函数来实例化对象,用原型链来实现继承. 这样对于数据传统C++.Java的OO范式的开发者来说,会感到比较困惑,于是从ES2015开始逐 ...
- Linux-CentOS5/6启动流程
Linux-CentOS5/6启动流程
- jquery validate验证规则重用
当多个控件验证规则相同时,如何避免冗余代码并应用相同规则呢? [1st way. addMethod+addClassRules] 场景:维护学生档案时需要维护父母.监护人.紧急联系人的身份证号码,此 ...
- vue 退出动画无效解决方法
遇到一个问题:给模态框加入退出动画,进入的动画效果是有的,可是退出的动画就没有了. 写个简单的结构: <div class="mask" v-show="warni ...
- Windows下使用VS的ADO访问MySQL
数据库的访问的一种方式就是:CS结构.即使用TCP/UDP协议进行远程访问,而数据库对于服务端的软件是本地访问!这种管理方式比较常见. 这里主要叙述Windows访问本地数据库的方法. 需要了解几个概 ...