1

私は Android アプリケーションに取り組んでおり、リファクタリングの問題に直面しています。私のアクティビティのほとんどには、特定の通知機能が必要です。つまり、トースト メッセージを表示します。これは、アクティビティを拡張するスーパークラスによって処理されます

アクティビティ

-通知アクティビティ

--MyActivityA

--MyActivityB

等々。次に、データベース カーソルによって入力される Spinner を使用する 2 つのアクティビティをリファクタリングすることにしました。階層は次のようになります。

アクティビティ

-MyNotificationActivity

--MyActivityA

--MyActivityB

--MySpinnerActivity (スピナーとカーソルを設定します)

---MySpinnerActivityA

---MySpinnerActivityB

私が今直面している問題はこれです - データベース Cursor も使用するが、ListView を設定する新しい Activity クラスを作成しています。組み込みの Android リスト管理を利用するために ListView を拡張したいと考えていますが、クラス階層に既に存在する Cursor セットアップ メソッドと通知メソッドにもアクセスする必要があります。

コードの重複を避けたいと思っています。助言がありますか?

乾杯、バリー

4

1 に答える 1

1

同様の問題 (ProgressDialogs を表示する一連のアクティビティ) に対処する際に、ProgressDialog 機能を使用してスーパークラスを拡張することを避けました。

代わりに、それを処理する別のクラス「LoadingDialog」を作成しました。この機能を必要とする各アクティビティには、クラス LoadingDialog のインスタンスがフィールドとして含まれます。また、コンテキストまたはアクティビティに依存する機能の場合、アクティビティはそれ自体への参照を渡したり、必要に応じて自身の他のビットを公開したりできます。

あなたの場合、おそらく、共通の機能をカプセル化するある種の「ToasterFunctionClass」を記述し、適切な各アクティビティにそのインスタンスを含めることができます。

public class ListStuff extends ListActivity {

    private ToastFunctionClass toaster = new ToastFunctionClass(this); //pass yourself so that toaster has a Context in which to do UI stuff.

    onSomethingHappened() {
        toaster.showToast("Something happened");
    }

}
于 2011-04-28T20:24:08.550 に答える