私はAndroidアプリ用のProgressDialogを作成しようとしています(何かが起こっていることをユーザーに示すだけのもので、ボタンなどはありません)が、私はそれを正しく取得できません。私は、SDKに付属するサンプルコードだけでなく、フォーラムやチュートリアルも経験しましたが、役に立ちませんでした。
これは私が得たものです:
_ btnSubmit.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
(...)
ProgressDialog pd = new ProgressDialog(MyApp.this);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setMessage("Working...");
pd.setIndeterminate(true);
pd.setCancelable(false);
// now fetch the results
(...long time calculations here...)
// remove progress dialog
pd.dismiss();
_
また、pd.show();
を追加して、_new ProgressDialog
_のパラメーターをいじってみましたが、何も起こりません(選択したパラメーターが機能しないエラーを除く)。つまり、ProgressDialogは今までに表示されます。ダイアログを追加したことがないかのように、アプリは実行を続けます。
適切な場所でダイアログを作成しているかどうかわかりません。少し移動しましたが、それも助けにはなりませんでした。たぶん私は間違った文脈にいますか?上記のコードは、MyApp
のprivate ViewGroup _createInputForm()
内にあります。
ヒントをいただければ幸いです
長い計算を開始する前にpd.showを呼び出してから、計算を別のスレッドで実行する必要があります。このスレッドが終了するとすぐに、pd.dismiss()を呼び出してprgoressダイアログを閉じる必要があります。
ここに例を見ることができます:
progressdialogが作成されて表示され、スレッドが呼び出されて重い計算が実行されます。
@Override
public void onClick(View v) {
pd = ProgressDialog.show(lexs, "Search", "Searching...", true, false);
Search search = new Search( ... );
SearchThread searchThread = new SearchThread(search);
searchThread.start();
}
そして、ここでスレッド:
private class SearchThread extends Thread {
private Search search;
public SearchThread(Search search) {
this.search = search;
}
@Override
public void run() {
search.search();
handler.sendEmptyMessage(0);
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
displaySearchResults(search);
pd.dismiss();
}
};
}
私はあなたにそれに対する解決策を与えています、これを試してください...最初にonCreate()
メソッドの前にアクティビティで進捗ダイアログを定義します
private ProgressDialog progressDialog;
onCreate
メソッドでは、任意のアクションでアクティビティを変更する[Any]ボタンをクリックできます。そこにプログレスバーを設定するだけです。
progressDialog = ProgressDialog.show(FoodDriveModule.this, "", "Loading...");
スレッドを使用して、進行状況バーを処理して表示および非表示にします
new Thread()
{
public void run()
{
try
{
sleep(1500);
// do the background process or any work that takes time to see progress dialog
}
catch (Exception e)
{
Log.e("tag",e.getMessage());
}
// dismiss the progress dialog
progressDialog.dismiss();
}
}.start();
それだけです!
これは AsyncTask を使用することでも可能です。このクラスはスレッドを作成します。サブクラス化し、doInBackground(...)
メソッドに入力する必要があります。