私がアンドロイド開発の初心者として抱えている苦労の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 を呼び出します。かなり簡単に、今では私には思えます...