我正在开发基本上在应用程序本身的开始下载大量的数据,并将其显示在ListActivity的应用程序。 我正打算做的是显示开机画面,直到数据被加载。
到现在为止我所有的努力是徒劳的。 我试图anddev.org提到的方法,但我的问题是,主要的活动应该开始,但直到我填充我ListActivity闪屏应该是可见的。 因此,在短期我必须要经过以下步骤:
- 开始我的主要活动。
- 显示启动画面。
- 继续运行在后台的进程。
- 退出闪屏处理完毕时,并显示在主列表。
希望你明白这就像....
我正在开发基本上在应用程序本身的开始下载大量的数据,并将其显示在ListActivity的应用程序。 我正打算做的是显示开机画面,直到数据被加载。
到现在为止我所有的努力是徒劳的。 我试图anddev.org提到的方法,但我的问题是,主要的活动应该开始,但直到我填充我ListActivity闪屏应该是可见的。 因此,在短期我必须要经过以下步骤:
希望你明白这就像....
问题是最有可能您正在运行闪屏(某种形式的对话 ,如ProgressDialog在同一个线程我假设)作为正在开展的各项工作。 这将保持被更新的闪屏,它可以保持它甚至还让显示在屏幕上的视图。 你需要显示启动画面,揭开序幕的一个实例的AsyncTask去下载所有数据,然后隐藏启动画面,一旦任务完成。
所以,你的活动的onCreate()方法将简单地创建一个ProgressDialog和表现出来。 然后创建的AsyncTask并启动它。 我会做的AsyncTask一个内部类的主要活动,因此它可以存储已下载到你的活动的一些变量的数据,并在其onPostExecute()方法关闭ProgressDialog。
不知道怎么了阐述,而不只是显示的代码,所以在这里它是:
public class MyActivity extends Activity {
private ProgressDialog pd = null;
private Object data = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Show the ProgressDialog on this thread
this.pd = ProgressDialog.show(this, "Working..", "Downloading Data...", true, false);
// Start a new thread that will download all the data
new DownloadTask().execute("Any parameters my download task needs here");
}
private class DownloadTask extends AsyncTask<String, Void, Object> {
protected Object doInBackground(String... args) {
Log.i("MyApp", "Background thread starting");
// This is where you would do all the work of downloading your data
return "replace this with your data object";
}
protected void onPostExecute(Object result) {
// Pass the result data back to the main activity
MyActivity.this.data = result;
if (MyActivity.this.pd != null) {
MyActivity.this.pd.dismiss();
}
}
}
}
显然,有一些您需要填写在那里片,但是这个代码应该运行,给你一个很好的起点(原谅我,如果有一个代码错误,我没有进入Android SDK,因为我打字目前)。
在AsyncTasks在Android的主题有些更良好的阅读可以发现这里和这里 。
仅供参考,这是我发现做一个闪屏的最佳方式: http://android-developers.blogspot.de/2009/03/window-backgrounds-ui-speed.html
我在寻找这个相当长的一段,从机器人文档..如果你想避免那些黑色的屏幕上,你需要创建windowBackground主题如此:
<resources>
<style name="Theme.Shelves" parent="android:Theme">
<item name="android:windowBackground">@drawable/background_shelf</item>
<item name="android:windowNoTitle">true</item>
</style>
</resources>
并将此作为主题从第一第二的主题为您的主要活动...... TADA,闪屏。
如果你想有一个复杂的背景,而不是只是一个形象,将被拉伸以填补你可以使用绘图资源,这里是一个层列表,将继续与黑色背景为中心的标志的例子:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@color/black">
</item>
<item>
<bitmap
android:gravity="center"
android:src="@drawable/logo"
android:tileMode="disabled" >
</bitmap>
</item>
</layer-list>
闪屏例子:
public class MainActivity extends Activity {
private ImageView splashImageView;
boolean splashloading = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
splashImageView = new ImageView(this);
splashImageView.setScaleType(ScaleType.FIT_XY);
splashImageView.setImageResource(R.drawable.ic_launcher);
setContentView(splashImageView);
splashloading = true;
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
splashloading = false;
setContentView(R.layout.activity_main);
}
}, 3000);
}
}
- 开始我的主要活动。
- 显示启动画面。
- 继续运行在后台的进程。
- 退出闪屏处理完毕时,并显示在主列表。
我试过这种方式,但问题是; 它会启动闪屏活动之前显示的主要活动。
我做了这种方式:
我的问题是如何禁用按菜单按钮“显示启动画面活动菜单”。
编辑:
禁用显示菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// getMenuInflater().inflate(R.menu.activity_main, menu);
return false;
}
@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
// return super.onMenuItemSelected(featureId, item);
return false;
}