1

コールバックが発生するまで、フラグメントとのすべての UI 対話をブロックできるようにしたいと考えています。

ButtonA と ButtonB の 2 つのボタンがあります。

ButtonA は進行状況バーを表示し、完了時にフラグメントにコールバックする非同期スレッドを開始します。その間、許可したくない ButtonB を誰かが押すことができます。

私の解決策は、透明ですべてのクリックを傍受する別のフラグメントをスピンアップすることでした。ただし、FragmentManagers commit() と実際に動作するフラグメントの間に遅延があるようです。
executePendingTransactions() を呼び出してみましたが、ユーザーが ButtonB を押す前にフラグメントが onClick イベントを受け入れる状態にないというスレッドの問題が発生します。

よりエレガントなソリューションはありますか?

ありがとう、

ジョン

4

5 に答える 5

0

ボタン A は、それを含むアクティビティを特定の状態 (リスナーでブール値のフラグを立てて) に置くことはできず、ボタン B は何かを行う前にそのフラグを読み取ることができませんか?

ここでは UI の問題だけでなく、いくつかのプレゼンテーション ロジックとミニステート マシンを実装する必要があると思います。このメカニズムと既に持っているフラグメントで、UI スレッド イベントの実行シーケンスのギャップを防ぐのに十分なはずです。

于 2013-08-16T22:39:18.267 に答える
0

もう 1 つのオプションは、進行状況ダイアログ フラグメントを使用して、キャンセル不可に設定することです。フラグメントをカバーし、下にあるフラグメントがタッチ イベントを受信しないようにします。

于 2013-08-15T11:44:42.713 に答える
0

別のフラグメントを呼び出す代わりに、現在のビューの上に進行状況ダイアログを含む別の透明なビューを作成し、それに応じてその可視性を VIEW または GONE にすることができます。

于 2013-08-15T11:45:25.930 に答える
0

buttonB.setEnabled(false); を呼び出します。ボタンAをクリックした後。

CustomButton extends View {

     private boolean mIsEnabled = true;

     public void setEnabled (boolean enabled) {
        this.mIsEnabled = enabled;
     }


     @Override
     public void onClick() {
          if (mIsEnabled) {
               mOnClickListener.onClick();
          } else {
              return;
          }
     }


}
于 2013-08-15T11:35:55.870 に答える