我有一个按钮,onclick读取并向用户显示带有rss新闻的列表。我想添加一个进度条直到完成加载。我的问题是,如果我添加一个条,它首先正常工作,但如果我按下后退按钮,条形图再次启动,它不能停止。任何帮助或演示进度条的教程都将不胜感激。谢谢!
ProgressBar myProgressBar;
int myProgress = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main1);
Button nea = (Button) findViewById(R.id.nea);
nea.setOnClickListener(new View.OnClickListener() {
public void onClick (View view) {
setContentView(R.layout.bar);
myProgressBar=(ProgressBar)findViewById(R.id.bar);
new Thread(myThread).start();
Intent myIntent = new Intent(view.getContext(), nea.class);
startActivityForResult(myIntent, 0);
}
});
}
private Runnable myThread = new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
while (myProgress<100){
try{
myHandle.sendMessage(myHandle.obtainMessage());
Thread.sleep(1000);
}
catch(Throwable t){
}
}
}
Handler myHandle = new Handler(){
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
myProgress++;
myProgressBar.setProgress(myProgress);
}
};
};
答案 0 :(得分:1)
问题是您没有恢复myProgress变量。在onCreate()的开头将其设置为0:
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main1);
myProgress = 0; // <--- notice that statement.
...
}
答案 1 :(得分:1)
实际上,我会使用AsyncTask
来实现此功能,您可以在onPreExecute()
中启动进度条,在onPostExecute()
中取消它,然后在doInBackground()
中进行下载。如果您想更新进度值,可以publishProgress()
doInBackground()
onProgressUpdate()
,然后可以在pg
https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/TweetListActivity.java#L328 显示了使用这些方法并显示/隐藏进度条({{1}}变量)的AsyncTask的示例
答案 2 :(得分:0)
您的代码看起来不像您希望的那样工作。您希望在此活动与下一个活动(我的假设)之间显示一个进度条。根据您的代码现在的工作方式,看起来当前活动将启动一个显示进度条大约100秒的线程,但同时您正在加载第二个Activity。因此,如果在100秒之前,如果您点击后退按钮,您将返回原始活动,该活动仍显示进度条。
一般来说,我不认为你需要在活动之间有一个进度条,因为它们应该非常顺利地在它们之间交换。我通常会使用进度条加载数据,然后才能完全呈现活动。
也许你应该看一下ProgressBar上的一些Android文档:
http://developer.android.com/reference/android/widget/ProgressBar.html
http://developer.android.com/reference/android/app/ProgressDialog.html