使用AsyncTask显示循环ProgressBar

时间:2013-06-29 20:09:05

标签: java android multithreading android-asynctask android-progressbar

我是初学者和安德鲁程序员,我正在编写一个小型计算器,其中输入了两个否,并且在按下总计时都会添加。按下Total时,必须有一个中间进度条(圆形),持续3秒,然后出现总值,我已经完成了计算器和进度条,但不知道如何将它们放入asynctask中,calc代码就在这里。请指导我怎么做

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        android:visibility="invisible"/>
     <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" 
        ></TextView>

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:inputType="number" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/editText1"
        android:layout_below="@+id/editText1"
        android:layout_marginTop="21dp"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignRight="@+id/editText2"
        android:text="Clear"
        android:onClick="Clicked" 
        />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText2"
        android:layout_marginTop="35dp"
        android:text="Total"
        android:onClick="Clicked"
         />

</RelativeLayout>

总计在这里进行了

public void   Clicked(View v)
{    int  total; 


     if(v.getId()==R.id.button1)
     {     
         int v1 = Integer.parseInt(t1.getText().toString());
         int v2 = Integer.parseInt(t2.getText().toString());
         total = v1 + v2;
         loadprogressbar();
         tv.setText(total+"");
         tv.setVisibility(1);
     }
     else if (v.getId()==R.id.button2)
     {
         t1.setText("");
         t2.setText("");
     }
}

我也有ProgressBar的代码,但实际上不知道如何将这些代码与asyncTask一起使用,先加载Progressbar然后再加载toatl value

2 个答案:

答案 0 :(得分:2)

基本上你需要做以下事情:

  1. 显示进度条。
  2. 等一段时间。
  3. 显示结果。
  4. 第二项应该在除main之外的其他一些线程中完成,否则UI将挂起。但是,其他任务必须在主线程上完成,因为它们操纵UI。你真的不需要在这么简单的情况下使用AsyncTask,你应该使用Handler代替:

    //Display the progress bar here
    
    //Create a handler and tell it to run a task 3 seconds later
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            //Hide the progress bar and show the results
        }
    }, 3 * 1000); //3 second delay is specified here
    

答案 1 :(得分:1)

将ProgressBar添加到您的布局,但将其可见性设置为“已消失”(android:visibility =“gone”) 在调用AsyncTask.execute()之前,将ProgressBar设置为visible(View.setVisibility(View.VISIBLE)。然后在onPostExecute()中,再将其设置为“off”) (View.setVisibility(View.GONE)。