Android实现欢迎页:在onCreate方法中两次调用setContentView
来源:互联网 发布:少林功夫 知乎 编辑:程序博客网 时间:2024/05/21 09:15
首先,要知道,setContentView方法的用途就是加载布局文件。
在做Android开发的时候,有时候需要在一个Activity的里面调用两次setContentView方法。比如在应用启动的时候,开始显示欢迎界面,在显示欢迎界面的同时,进行后台数据的处理,等到后台数据准备好了,才显示真正的应用界面。这样的做法不会让使用者有突兀的感觉。反之,应用已启动就显示真正的应用界面,但在后续的操作需要准备数据的时候,假定是5秒钟,那么在这5秒钟内使用者将无法使用该应用,这样用户界面显然是不够友好的。
为了实现欢迎界面,大家很自然地就会想到:在onCreate方法中,调用两次setContentView。是的,要调用两次setContentView,但怎么调用还是有点技巧,而不是简单地调用两次setContentView就可以解决问题的。下面,我们就用实际的例子来给予说明。
下面来完善WelcomeActivity.java的代码,如果我们像下面这样直接写:
package com.pat.welcome;import Android.app.Activity;import Android.os.Bundle;public class WelcomeActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main); // 把这一句改为下面一句,用以显示欢迎界面 setContentView(R.layout.welcome); // 下面是模拟数据处理需要5秒钟的时间 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } setContentView(R.layout.main); // 显示真正的应用界面 }}
你将会发现,欢迎界面根本没有出现。在本该出现欢迎界面的时候,界面上什么也没有,过了几秒钟(程序中指定的5秒钟),然后就直接显示真正的应用界面;如果把上面程序中的两条setContentView语句的位置互换,程序开始运行的时候界面上什么也没有,过了几秒钟(程序中指定的5秒钟),然后就直接显示欢迎界面。从现象上看,似乎只有最后那个setContentView语句才会起作用。事实上,的确是这样的。setContentView方法所指定的View,只有在onCreate方法返回后才会显示在界面上。因此,如果调用了两次setContentView方法,只有最后一次才是有效的。 那么怎样解决我们在开始提出的问题呢?即应用启动的时候,显示欢迎界面,过几秒后,再显示真正的应用程序界面呢?下面的解决办法,供大家参考,具体做法:
package com.pat.welcome;import Android.app.Activity;import Android.os.Bundle;import Android.os.Handler;import Android.os.Message;public class WelcomeActivity extends Activity{ private Handler handler; // 声明handler @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //setContentView(R.layout.main);// 把这一句改为下面一句 setContentView(R.layout.welcome); // 初始化handler handler = new Handler() { @Override public void handleMessage(Message msg) { if(msg.what == 1) // handler接收到相关的消息后 { setContentView(R.layout.main);// 显示真正的应用界面 } } }; // 新建一个线程,过5秒钟后向handler发送一个消息 Runnable runnable = newRunnable() { public void run() { try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } handler.sendEmptyMessage(1);//曾想注掉这句话,直接调用setContentView(R.layout.main),但报异常 } }; Thread thread = new Thread(runnable); thread.start(); }}
这样就可以做到先显示欢迎界面5秒钟,然后再显示真正的应用程序界面。
- Android实现欢迎页:在onCreate方法中两次调用setContentView
- AndroidGUI28:在onCreate方法中两次调用setContentView
- AndroidGUI28:在onCreate方法中两次调用setContentView
- Android OnCreate、setContentView方法
- Android中一个Activity第二次启动时,onCreate()调用setContentView()方法时出错,程序崩溃
- android开发 Activity的里面调用两次 setContentView方法
- Android onCreate方法被调用两次的解决方法
- Android Activity应用之 两次调用setContentView
- android 拍照 onCreate() 调用两次的问题
- android 拍照 onCreate() 调用两次的问题
- activity中onCreate没有调用setContentView,会如何展示?
- 【ANDROID】Android 在oncreate() 方法中调用 findViewById 返回 null 问题的原因和解决方法
- Android在onCreate方法中调用显示Popupwindow报错 android.view.WindowManager$BadTokenException
- 在oncreate/onstart事件中不要调用startActivityForResult方法
- 解决Popupwindowon在onCreate方法中调用出现的错误
- 解决android横屏后activity启动两次onCreate方法
- 关于Activity中onCreate()方法执行两次的问题
- Android下在onCreate方法中获取TextView的高度
- bitset
- oracle笔记
- MDI&MDIX小知识
- NS-3中Modules not built: click openflow
- 程序员的君子五德
- Android实现欢迎页:在onCreate方法中两次调用setContentView
- 打开视图链接 设置为默认帧结构集
- 方法的覆盖
- awr入门
- glMatrixMode()函数和glLoadIdentity()函数
- 修炼一名程序员的职业水准(林庆忠__署名原创)
- 多态
- Android应用开发——系统自带样式Android:theme
- win8下metro风格应用程序的生命周期