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内部按钮的点击事件,不要在 ...
随机推荐
- vijos--P1211--生日日数(纯模拟)
P1211生日日数 未递交 标签:[显示标签] 描述 CCC老师的生日是YY年MM月DD日,他想知道自己出生后第一万天纪念日的日期(出生日算第0天). 格式 输入格式 从文件的第一行分别读入YY,MM ...
- matlab2017a doc 关联注册码
在 matlab 2017a 的命令行界面,输入doc **查看相关函数的帮助文档时,必须要关联注册码才可使用. 这种显然是在网络连接状况下给出的提示,也即主机处在网络连接状态,试图默认查找的网络中的 ...
- feign client传递对象
http://bbs.springcloud.cn/d/134-feign-client server端申明 @RestController public class HelloController ...
- Flume 启动
Configuration是Flume项目的入口程序了,当我们输入 bin/flume-ng agent --conf conf --conf-file conf/kafka1.properties ...
- Android控件postDelayed用法,View自带的定时器
有一个需求是这样的,点击加关注按钮后,执行关注操作,成功后按钮文字变为“已关注”,保持3秒,三秒后按钮文字便问“取消关注”,点击后执行取消关注的操作 源码: public boolean postDe ...
- vue实现文字上下滚动
实现文字的上下滚动使用positon的relative的top属性,通过动态改变top来实现相关内容的更换,通过transion来实现相关的动画效果, 相关的dom内容 <template> ...
- Vue总结(三)
Vue 实例还暴露了一些有用的实例属性与方法.它们都有前缀 $,以便与用户定义的属性区分开来. var App = new Vue({ el: "#root", data: { m ...
- AWK行处理的用法实例
第一节 awk的工作流程及基础用法 awk操作符会先检索文件的行信息,然后在行信息里找需要的内容. Awk的默认分割付是空格,awk '/模式/{print $1,$2}' file ##模式的位置可 ...
- PHP -Casbin: 支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架
PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架( https://github.com/php-casbin... ),目前在 GitHub 开源.PHP-Casbin 采用 ...
- 紫书 习题 10-10 UVa 1645(递推)
除了根节点以外,有n-1个节点,然后就看n-1的因数有那些,所有因数加起来(递推)就好了. #include<cstdio> #define REP(i, a, b) for(int i ...