AsyncTask中的ProgressDialog

时间:2014-04-09 07:51:36

标签: android android-asynctask progressdialog

我正在尝试使用ProgressDialog将文本从一个编辑文本传输到另一个编辑文本时添加AsyncTask。任何人都可以帮我解释代码吗?

您是否也可以解释为什么我们需要使用AsyncTask。我基本上需要使用处理程序来更新进度吗?

  

activity_main.xml中

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    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" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:ems="10"
        android:hint="Enter Text.." >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText1"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="82dp"
        android:text="Transfer" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="114dp"
        android:ems="10"
        android:hint="Received Text.." />

    </RelativeLayout>
  

MainActivity.java

package com.example.progressbar;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {
    Button btn;
    EditText et1, et2;
    String sent;
    ProgressDialog progress;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progress = new ProgressDialog(MainActivity.this);

        et1 = (EditText) findViewById(R.id.editText1);
        et2 = (EditText) findViewById(R.id.editText2);

        sent = et1.getText().toString();

        btn = (Button) findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View view) {

                TransferText tt = new TransferText();
                tt.execute(sent);
            }
        });

    }

    class TransferText extends AsyncTask<String, String, String> {

        @Override
        protected void onPreExecute() {
            progress = new ProgressDialog(MainActivity.this);
            progress.setTitle("Transferring...");
            progress.setMessage("Please wait.");
            progress.setCancelable(false);
            progress.setIndeterminate(true);
            progress.show();
        }

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            String result = sent;
            final int time = 100;
            Thread t = new Thread() {

                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "Transferring",
                            Toast.LENGTH_SHORT).show();
                    int i = 0;
                    while (i < time) {
                        try {
                            sleep(50);
                            i += 5;
                            progress.setProgress(i);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                    }
                }
            };

            t.start();

            return result;
        }

        @Override
        protected void onPostExecute(String result) {
            et2.setText(result);
        }

    }
}
  

我希望转移在后台进行,同时显示前面的进度条。当进度条达到100%时,转移应该完成。

2 个答案:

答案 0 :(得分:1)

你绝对不应该使用ASyncTask将文本从一个EditText移动到另一个EditText。

之后:

 sent = et1.getText().toString();

这样做:

et2.setText(sent);

或者只是这个:

et2.setText(et1.getText().toString());

答案 1 :(得分:0)

您不需要使用Async类将文本从一个编辑文本传输到另一个编辑文本。如果你想同时发送文本,你可以使用textwatcher。