两个activity 前一个按扭点击事件执行查询,数据量比较大,所以跳转等待时间比较长,固想用进度条显示程序运行中...该如何实现?
解决方案 »
- 能否仅在jni中获取系统时间(不调用java部分代码)
- 关于android使用xmpp实现数据推动
- 请问这个json数据用Gson怎么解析?急!
- 一个简单的数值转换问题
- 在Activity中启动的service是一个线程还是一个进程
- 请教一个helloworld的问题
- 求如何在GridView底部加一个按钮
- 求教如何检测 webview 滚动停止?
- 读取html带自定义标签问题,TagHandler
- 求大神救急!新手第一次写,unfortunately ,xx has stoped怎么办?
- 如何实现左右滑动切换activity界面
- 求高手指点:如何将自带日历的第一列改为星期一,将星期日放在最后一列?
package com.zyq.main;import java.util.ArrayList;import android.app.Activity;
import android.app.Dialog;
import android.app.ListActivity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.Toast;
public class ListProgressDemo extends ListActivity {
private ArrayAdapter<String> adapter;
private ArrayList<String> data;
private static final int PROGRESS_DIALOG = 1;
private static final int STATE_FINISH = 1;
private static final int STATE_ERROR = -1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((Button) findViewById(R.id.load_Handler)).setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
data = null;
data = new ArrayList<String>();
adapter = null;
showDialog(PROGRESS_DIALOG);
new ProgressThread(handler, data).start();
}
});
}
@Override
protected Dialog onCreateDialog(int id) {
switch(id) {
case PROGRESS_DIALOG:
return ProgressDialog.show(this, "",
"Loading. Please wait...", true);
default: return null;
}
}
private class ProgressThread extends Thread {
private Handler handler;
private ArrayList<String> data;
public ProgressThread(Handler handler, ArrayList<String> data) {
this.handler = handler;
this.data = data;
}
@Override
public void run() {
for (int i=0; i<8; i++) {
data.add("ListItem"); //后台数据处理
try {
Thread.sleep(100);
}catch(InterruptedException e) {
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putInt("state", STATE_ERROR);
msg.setData(b);
handler.sendMessage(msg);
}
}
Message msg = handler.obtainMessage();
Bundle b = new Bundle();
b.putInt("state", STATE_FINISH);
msg.setData(b);
handler.sendMessage(msg);
}
}
// 此处甚至可以不需要设置Looper,因为Handler默认就使用当前线程的Looper
private final Handler handler = new Handler(Looper.getMainLooper()) {
public void handleMessage(Message msg) { // 处理Message,更新ListView
int state = msg.getData().getInt("state");
switch(state){
case STATE_FINISH:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(),
"加载完成!",
Toast.LENGTH_LONG)
.show();
adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
data );
setListAdapter(adapter);
break;
case STATE_ERROR:
dismissDialog(PROGRESS_DIALOG);
Toast.makeText(getApplicationContext(),
"处理过程发生错误!",
Toast.LENGTH_LONG)
.show();
adapter = new ArrayAdapter<String>(getApplicationContext(),
android.R.layout.simple_list_item_1,
data );
setListAdapter(adapter);
break;
default:
}
}
};
}
因为跳转到另一个activity这个过程中,想再启动另外一个activity,那排队也排到后面了,所以,只能在跳转之前先弹出进程框,那么第一个activity可以访问进程框,第二个activity想访问就难了,因为还没启动起来啊。
我不知道楼主所谓的慢,是数据查询慢呢,还是启动第二个activity慢,如果是前者慢,那倒是可以用个进程框来显示进程。有人做出来了吗?看看代码。
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Bitmap.Config;
import android.graphics.Paint.Style;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class StartView extends Activity
{
//
Paint paint = null;
Bitmap mSCBitmap = null;
Canvas mCanvas = null;
//
int a,b;
int startDrawBgX, startDrawBgY;
int startProgressX,startProgressY;
int startRectX ,startRectY ;
int rectW , rectH;
Bitmap bmpStartBg;
Bitmap bmpProgressBar;
Bitmap bmpStartBgL;
Bitmap bmpProgressBarL;
Boolean runA = true;
//
private MyView myView;
private Handler mHandler;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
//设置全屏
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.TYPE_STATUS_BAR,
WindowManager.LayoutParams.TYPE_STATUS_BAR);
//
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//
bmpStartBg = BitmapFactory.decodeResource(getResources(), R.drawable.startbg);
bmpProgressBar = BitmapFactory.decodeResource(getResources(), R.drawable.progressbg);
//
int w = bmpStartBg.getWidth()*2;
int h = bmpStartBg.getWidth();
int width = bmpStartBg.getWidth();
int height = bmpStartBg.getHeight();
int newWidth = w;
int newHeight = h;
float scaleWidth = ((float) newWidth) / width;
float scaleHeight = ((float) newHeight) / height;
a = (int) scaleWidth;
b = (int) scaleHeight;
//
Matrix matrix = new Matrix();
matrix.postScale(a, b);
//
bmpStartBgL = Bitmap.createBitmap(bmpStartBg, 0, 0, bmpStartBg.getWidth(),bmpStartBg.getHeight(), matrix, true);
bmpProgressBarL = Bitmap.createBitmap(bmpProgressBar, 0, 0, bmpProgressBar.getWidth(),bmpProgressBar.getHeight(), matrix, true);
//
startDrawBgY = (this.getWindowManager().getDefaultDisplay().getHeight() - bmpStartBgL.getHeight()) / 2 - 40;
startDrawBgX = (this.getWindowManager().getDefaultDisplay().getWidth() - bmpStartBgL.getWidth()) / 2;
//
startProgressY = (this.getWindowManager().getDefaultDisplay().getHeight() - bmpProgressBarL.getHeight()) / 2 - 15;
startProgressX = (this.getWindowManager().getDefaultDisplay().getWidth() - bmpProgressBarL.getWidth()) / 2;
//
startRectX = startProgressX;
startRectY = startProgressY;
rectW = startProgressX+bmpProgressBarL.getWidth();
rectH = startProgressY+bmpProgressBarL.getHeight();
//
myView = new MyView(this);
setContentView(myView);
//
mSCBitmap = Bitmap.createBitmap(320, 480, Config.ARGB_8888);
mCanvas = new Canvas();
mCanvas.setBitmap(mSCBitmap);
//
mHandler = new Handler();
mHandler.post(update);
}
private Runnable update = new Runnable()
{
public void run()
{
myView.update();
mHandler.postDelayed(update, 100);
}
};
public class MyView extends View
{
public MyView(Context context)
{
super(context);
}
public void update()
{
postInvalidate();
}
protected void onDraw(Canvas canvas)
{
// super.onDraw(canvas);
if(startRectX < startProgressX + bmpProgressBarL.getWidth())
{
startRectX = startRectX + 2;
//首先定义一个paint
paint = new Paint();
// 设置样式-填充
paint.setStyle(Style.FILL);
paint.setColor(UsedColor.startBgColor);
// 绘制一个矩形
mCanvas.drawRect(new Rect(0, 0, getWidth(), getHeight()), paint);
//输出背景图片
paint.setColor(UsedColor.progressBgColor);
mCanvas.drawBitmap(bmpStartBgL, startDrawBgX, startDrawBgY, paint);
mCanvas.drawBitmap(bmpProgressBarL, startProgressX, startProgressY, paint);
mCanvas.drawRect(new Rect(startRectX, startRectY, rectW, rectH), paint);
canvas.drawBitmap(mSCBitmap, 0 ,0, paint);
}
else
{
if(runA)
{
finish();
//生成一个Intent对象
Intent intent = new Intent();
intent.putExtra("textIntent", "");
intent.setClass(StartView.this, MainView.class);
StartView.this.startActivity(intent);
runA = false;
}
}
}
}
}这是我做的一个项目的, 就是启动界面 开头的一个登陆的activity 然后进入主界面。
从ActivityA跳转到ActivityB
1,你的下一个Activity不是加载的东西多吗?先不要运行B,你先在A中,点了跳转按钮之后就先开始加载,顺便开始画进度条
2,等到加载完了,直接把结果们传给B(这个应该稍微快一点)