0

http://startandroid.ru/uroki/vse-uroki-spiskom/128-urok-67-dialogi-progressdialog.htmlの例を使用します

2つのボタンがあります。
onClick最初のボタン-進行状況ダイアログを表示します。
onClick2番目のボタン-進行状況ダイアログを表示します。

最初のボタンをすばやくクリックし、次に2番目のボタンをクリックすると、2つの進行状況ダイアログが表示されます。この可能性を無効にする方法は?(ボタンの1つをクリックしたときにこの2つのボタンを無効にするか、LinearLayoutを無効にするのが良いですか...)

文字列.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="dflt">Обычный</string>
<string name="horiz">Горизонтальный</string>
<string name="app_name">ProgressDialog</string>
</resources>

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical">
<Button
 android:id="@+id/btnDefault"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/dflt"
 android:onClick="onclick">
</Button>
<Button
 android:id="@+id/btnHoriz"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:text="@string/horiz"
 android:onClick="onclick">
</Button>
</LinearLayout>

MainActivity.java:

package ru.startandroid.develop.p0671progressdialog;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;

public class MainActivity extends Activity {

  ProgressDialog pd;
  Handler h;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

  }

  public void onclick(View v) {
    switch (v.getId()) {
    case R.id.btnDefault:
      pd = new ProgressDialog(this);
      pd.setTitle("Title");
      pd.setMessage("Message");
      // добавляем кнопку
      pd.setButton(Dialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
      });
      pd.show();
      break;
    case R.id.btnHoriz:
      pd = new ProgressDialog(this);
      pd.setTitle("Title");
      pd.setMessage("Message");
      // меняем стиль на индикатор
      pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
      // устанавливаем максимум
      pd.setMax(2148);
      // включаем анимацию ожидания
      pd.setIndeterminate(true);
      pd.show();
      h = new Handler() {
        public void handleMessage(Message msg) {
          // выключаем анимацию ожидания
          pd.setIndeterminate(false);
          if (pd.getProgress() < pd.getMax()) {
            // увеличиваем значения индикаторов
            pd.incrementProgressBy(50);
            pd.incrementSecondaryProgressBy(75);
            h.sendEmptyMessageDelayed(0, 100);
          } else {
            pd.dismiss();
          }
        }
      };
      h.sendEmptyMessageDelayed(0, 2000);
      break;
    default:
      break;
    }
  }
}
4

2 に答える 2

1

ビューを無効にする代わりに、ダイアログがクリックされたときに true に設定するブール変数を作成するだけです。onClick 関数では、アクティブなダイアログが既に存在するかどうかを確認できます。次に、ダイアログに onDismissListener を追加して、ブール変数をリセットできます。

于 2012-12-17T18:36:30.170 に答える
0

別のボタンをクリックしたときに、新しい進行状況ダイアログを表示する前に現在の進行状況ダイアログを消したいと言っていますか? ダイアログが表示されている場合は、ダイアログを閉じる必要があると思います。onClick()

  public void onclick(View v) {
     if (pd != null) {
        pd.dismiss();
     }
     switch (v.getId()) {
     case R.id.btnDefault:
     ....
于 2012-12-17T18:32:24.663 に答える