如何解决当从一种意图转到另一种意图并且数据来自服务器时,在单击按钮时显示进度条
| 我在一页中有一个按钮,当我单击该按钮时, 能够通过Intent()进行其他活动,但是onbuttonclick() 我要在微调器中的那个活动数据中进行哪个活动 来自服务器的意思是单击按钮 我从server.spinner上加载了数据,所以移动按钮点击活动需要花费时间 其他活动,因此我想在单击按钮时显示进度栏 直到数据不是来自服务器...如何实现这一目标..我想显示进度栏 在buttonclick页面上是指单击按钮时的第一次活动。 我的按钮单击代码如下。cuurentloc.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
Intent i = new Intent(MainMenu.this,currentlocmap.class);
startActivity(i);
}
});
实际上,我知道异步任务,但是使用该任务,我将能够在第二个活动中显示进度条,我想在第一个活动中显示进度条,直到在第二个活动中未加载数据为止,因此我希望在第一个活动的按钮上方显示进度条,在第二个活动中加载数据时,该数据将移至第二个活动。
解决方法
您需要使用AsyncTask作为我在这里指导的方法。
在第一个活动中创建异步任务。在按钮上单击该AsyncTask的事件调用。在后台从服务器加载数据。和onPostExecute启动第二个活动
cuurentloc.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
new ProgressTask(MyClassName.class).execute(null);
}
});
异步任务
private class ProgressTask extends AsyncTask<String,Void,Boolean> {
private ProgressDialog dialog;
List<Message> titles;
private ListActivity activity;
//private List<Message> messages;
public ProgressTask(ListActivity activity) {
this.activity = activity;
context = activity;
dialog = new ProgressDialog(context);
}
/** progress dialog to show user that the backup is processing. */
/** application context. */
private Context context;
protected void onPreExecute() {
this.dialog.setMessage(\"Progress start\");
this.dialog.show();
}
@Override
protected void onPostExecute(final Boolean success) {
if (dialog.isShowing()) {
dialog.dismiss();
}
Intent i = new Intent(MainMenu.this,currentlocmap.class);
startActivity(i);
}
protected Boolean doInBackground(final String... args) {
try{
//load data from server
} catch (Exception e){
Log.e(\"tag\",\"error\",e);
return false;
}
}
}
}
谢谢
迪帕克
, 看一下这段代码
package com.exercise.AndroidBackgroundThread;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class AndroidBackgroundThread extends Activity {
Thread backgroundThread;
TextView myText;
boolean myTextOn = true;
boolean running = false;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
//super.handleMessage(msg);
if (myTextOn){
myTextOn = false;
myText.setVisibility(View.GONE);
}
else{
myTextOn = true;
myText.setVisibility(View.VISIBLE);
}
}
};
void setRunning(boolean b){
running = b;
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myText = (TextView)findViewById(R.id.mytext);
Toast.makeText(this,\"onCreate()\",Toast.LENGTH_LONG).show();
}
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Toast.makeText(this,\"onStart()\",Toast.LENGTH_LONG).show();
backgroundThread = new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while(running){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendMessage(handler.obtainMessage());
}
}
});
setRunning(true);
backgroundThread.start();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
boolean retry = true;
setRunning(false);
while(retry){
try {
backgroundThread.join();
retry = false;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Toast.makeText(this,\"onStop()\",Toast.LENGTH_LONG).show();
}
}
and for more detail look at this guide http://tech-aamir.blogspot.in/2012/06/how-to-make-progress-bar-when.html
Best of luck
aamirkhan i.
, 由于您熟悉AsyncTask,因此可以以第一个答案为基础。您可以让AsyncTask执行工作以检索您在第一个活动中所需的任何数据。在此过程中,您将显示进度栏。 AsyncTask完成后,您将删除进度条,将数据放入捆绑包中(通过调用putExtras),并出于启动第二个活动的目的而将其发送出去。
, 您可以在currentlocmap类中使用ProgressBar
或ProgressDialog
。
为此使用AsyncTask
类,并在获取数据时使用setContentView()
设置布局并关闭ProgressDialog
。
请参阅以下链接:
从服务器获取数据并在获取数据时刷新UI?
如何在Android中动态启动和完成progressBar
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。