0

電話の連絡先リストを更新する機能があります。連絡先が更新されているときに進行状況バーを配置する必要があります。更新機能に進行状況バーを追加する必要があります。それ、どうやったら出来るの?更新機能はうまく機能しています。更新中であることを示すプログレス バーのみが必要です。助けてください。

 public void onClick(View v){

                //reset progress bar status
                progressBarStatus = 0;

                //reset filesize
                fileSize = 0;

                new Thread(new Runnable() {
                    public void run() {
                        while (progressBarStatus < 100) {

                            // process some tasks
                            progressBarStatus = UpdateContact();

                            // your computer is too fast, sleep 1 second
                            try {
                                Thread.sleep(1000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                            // Update the progress bar
                            progressBarHandler.post(new Runnable() {
                                public void run() {
                                    progressBar.setProgress(progressBarStatus);
                                }
                            });
                        }

                        // ok, file is downloaded,
                        if (progressBarStatus >= 100) {

                            // sleep 2 seconds, so that you can see the 100%
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }

                            // close the progress bar dialog
                            progressBar.dismiss();
                        }
                    }


                }).start();

            }

        });
4

2 に答える 2

0

これを使って:

これらの関数は、4 つの画像間で読み込みを変更し続けます。連絡先を更新する前に呼び出すだけで、データを取得した後に StopProgress() を呼び出します。

XML レイアウト "progress_layout":

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:background="@null"
    android:layout_gravity="center" >

    <ImageView
        android:id="@+id/progressbar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/loading"
        />

</RelativeLayout>

2 つのメソッドを作成します: StartProgress() と StopProgress()

private Dialog  progressDialog;
    int AdsIndex, AdsCount;
    Timer timer= new Timer();
    public void startProgress()
    {
        progressDialog = new Dialog(getActivity(), android.R.style.Theme_Translucent_NoTitleBar);
        progressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        progressDialog.setCancelable(false);
        progressDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        progressDialog.setContentView(R.layout.progress_layout);

        final ImageView img = (ImageView) progressDialog.findViewById(R.id.progressbar);
        final Integer drawableList[] = {R.drawable.loading, R.drawable.loading2, R.drawable.loading3, R.drawable.loading4};

        final Handler adsHandler = new Handler();    
         final Runnable adsUpdateResults = new Runnable() {
            public void run() {

                if(AdsCount > 0)
                {
                    img.setImageDrawable(getResources().getDrawable(drawableList[AdsIndex]) );

                     AdsIndex++;

                     if(AdsCount == AdsIndex)
                         AdsIndex = 0;
                }
            }
        };
        final int adsDelay = 200; // delay for xx sec.      
        final long adsPeriod = 200;//repet every xx seconds       

        timer.scheduleAtFixedRate(new TimerTask() {

            public void run() {
                adsHandler.post(adsUpdateResults);
            }

        }, adsDelay, adsPeriod);

        progressDialog.show();
    }

    public void stopProgress()
    {
        progressDialog.dismiss();
    }
于 2013-08-02T12:26:55.390 に答える
0

を使用したソリューションのAsyncTask方がエレガントだと思います。これは、のサンプル コードですAsyncTask

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;

public class MyAsyncTask<Params, Progress, Result> extends
    AsyncTask<Params, Progress, Result> {

    private final String DIALOG_MESSAGE = "Updating contacts";

    private ProgressDialog mDialog = null;

    private void setDialog(Context context) {
        this.mDialog = new ProgressDialog(context);
        this.mDialog.setMessage(DIALOG_MESSAGE);
        this.mDialog.setCancelable(false);
    }

    public MyAsyncTask(Context context) {
        this.setDialog(context);
    }

    @Override
    protected void onPreExecute() {
        this.mDialog.show();
    }

    @Override
    protected Result doInBackground(Params... arg0) {
        // Place your background executed method here
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    protected void onPostExecute(Result result) {
        // Update the UI if u need to

        // And then dismiss the dialog
        if (this.mDialog.isShowing()) {
            this.mDialog.dismiss();
        }
    }
}

これは、Async を呼び出すコードです。

import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

    private Context context = null;

    private Button btn = null;

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

        this.context = this;

        this.btn = (Button) this.findViewById(R.id.button1);
        this.btn.setOnClickListener(onClickUpdateContacts);

    }

    private OnClickListener onClickUpdateContacts = new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            MyAsyncTask<Void, Void, Void> updateTask = new MyAsyncTask<Void, Void, Void>(context);
            updateTask.execute();
        }

    };

}

ダイアログの外観をアプリのルックアンドフィールに合わせて簡単に変更することもできます。この簡単なコードがお役に立てば幸いです^^

于 2013-08-02T13:15:43.627 に答える