0

私がアンドロイド開発の初心者として抱えている苦労の1つは、私のクラスがGUIリスナーなどのすべての内部クラスなどで非常に広範囲になる傾向があることです。だから私はクラスを分解するための1つの解決策を思いつきました.Androidの専門家からのフィードバックを聞きたいです.

例にすると。特定のアクティビティが同じクラス内に持つすべてのダイアログを定義したくありません (そのアクティビティで一連のダイアログが発生しています)。そのため、DialogManager クラスを実装して、潜在的なすべてのダイアログを定義および保持し、ハンドラー インスタンスを渡します。 Activity をこの DialogManager に渡し、それを使用して、発生した GUI イベントについて Activity に通知します。

これは、この DialogManager クラスのスニペットです。mHandler は、Activity にコールバックするハンドラーです。

mDownloadDialog = new ProgressDialog(mContext);

mDownloadDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
                new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {                      

                        mDownloadDialog.dismiss();

                        Message message = mHandler.obtainMessage();
                        message.arg1 = DOWNLOAD_DIALOG;
                        message.arg2 = AlertDialog.BUTTON_NEGATIVE;
                        message.sendToTarget();
                    }
                });

したがって、これは機能し、より整理されたソースコードに満足していますが、ハンドラークラスがこれを行う適切な方法なのか、それとも少しやり過ぎであり、同じ結果を達成するためのより良い方法があるのか​​ 疑問に思います.おすすめされた。

編集:ボルダーが指摘したように

ハンドラ メッセージはすぐには実行されません

したがって、これを念頭に置いて、Handler を使用することは適切な方法ではありません。

次のアイデアは、与えられた例でインターフェイスを定義するのと同じくらい簡単です

public interface DialogEventReceiverInterface { 
public void dialogEvent(int dialog,int button);
}

そのインターフェイスをアクティビティに実装し、アクティビティを DialogManager に渡し、イベントが発生した場合に dialogEvent を呼び出します。かなり簡単に、今では私には思えます...

4

2 に答える 2

1

これは 100% 求めているものではないかもしれませんが、Android アプリで発生している問題に対処できる可能性があります。

多くの UI イベントを処理する場合、多くの内部クラス リスナーが必要になることがよくあります。もう 1 つのオプションは、パブリッシュ/サブスクライブです。イベントを公開し、オブジェクトが特定のイベントをサブスクライブする場所。Android では、Google が使用するこの優れたライブラリ セットがあり、これGuavaにはたくさんの優れた機能があります。その1つは、これがEventBus少し簡単になることです。

http://code.google.com/p/guava-libraries/wiki/EventBusExplained

彼らはそこにいくつかの素晴らしい例を持っており、それを順を追って説明しています. これは大きな変更であり、UI の考え方も変わったので、調査せずに飛びつくことはできません。プロジェクトに適していることを確認してください。

EventBus はクールで、Guavaライブラリには多くの優れた機能があります。

于 2012-09-19T14:15:45.577 に答える
1

Dialogs に関連する混乱を整理することについて必ずしも具体的に質問しているわけではありませんが、Dialog表示されているコードは、解決する設計パターンを求めていると思われる広範な問題の単なる例です。

ただし、特定の s の例に焦点を当てると、Android API は、 sDialogの形式で、これに対してよりクリーンなソリューションを既に提供しています。クラスを使用すると、通常は別のクラス ファイルで s を定義するため、よりクリーンな方法で作業を行うことができます。Android API ドキュメントには、と親の間の通信を処理する方法に関する非常に優れたガイドラインが含まれています。FragmentDialogFragmentFragmentDialogFragmentDialogFragmentActivity

Fragmentすべてに sを使用するように切り替える前は、クラスDialog内に大量の s が作成されることにActivityなり、ダイアログ マネージャーなどを使用してさまざまなデザイン パターンを試しFragmentました。

V4 サポート パッケージを使用できるため、以前の Android バージョンとの互換性は問題ありません。

于 2012-09-19T14:33:36.750 に答える