0

onClickListener を使用してボタンのクリックを作成および処理する方法について、多くのスレッドを読みました。しかし、この問題を解決するものは見つかりませんでした。

クラス myActivity があり、いくつかの機能を追加して myActivity を拡張する 2 番目のクラス myExtendedActivity を作成したいと考えています。クラス myActivity には多くのコードが含まれていますが、保守性の理由から、複製したくありません。myExtendedActivity は、いくつかの追加機能を備えた myActivity とまったく同じように動作する必要があります。

特に、myActivity の onCreate メソッドには、onClickListener を my_button に追加する次のコードがあります。拡張アクティビティは、myExtraMethod への呼び出しを追加するだけです。

myButton = (Button)findViewById(R.id.my_button); 
myButton.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View v) 
    {
        [...]   //a lot of code here

        myExtraMethod();

    }
});

myExtraMethod はインテントをブロードキャストするだけであり、リスナーのコードの他の部分の影響を受けないことに注意してください。

私がやりたいことは、myExtendedActivity で OnClickListener を拡張して、最初に myActivity 用に記述されたコードを正確に実行し、myExtendedActivity で定義された myExtraMethod を実行することです。

myExtendedActivity がプロジェクトに含まれているかどうかを完全に認識できない myActivity を変更したくありません。

どうもありがとうございました

4

3 に答える 3

2

myActivity を完全に変更せずに行うことはほとんど不可能です。

次のようなものを使用できます(テンプレート メソッド パターンMyActivityの変形):

onCreate() {
    myButton.setOnClickListener(new View.OnClickListener() 
    {
        public void onClick(View v) 
        {
           myMethod();
        }
    });

}

protected void myMethod() {
    [...]   //a lot of code here
}

そして、でMyExtendedActivty

@Override
protected void myMethod() {
    super.myMethod();
    myExtraMethod();
}
于 2013-01-17T21:09:31.833 に答える
0

あなたの質問を正しく理解していれば、解決策は次のようになります。

ボタンのレイアウトでは、xml から onClickListener を定義します。

<Button
        android:id="@+id/myButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="handleButtonClick"
    />

次に、MyActivity でメソッドを実装します。

public void handleClick(View view) {

}

MyExtendedActivity では、それをオーバーライドします。

public class MyExtendedActivity extends MyActivity {
    @Override
    public void handleClick(View view) {
        super.handleClick(view);
        //your code goes here

    }
}
于 2013-01-17T21:05:08.797 に答える
0

を変更myActivityしないと、匿名クラスをインスタンス化することはできず、サブクラスにはその匿名クラスに「フック」する方法がありません。

を変更できる場合は、静的クラスmyActivityから匿名クラスを作成myButton.setOnClickListener(...)し、サブクラスで を呼び出してリスナー クラスを拡張しsuper.onClick(v)、その後に期待する機能を追加できます。

次に、正しいリスナーを取得するメソッドを追加します

myButton.setOnClickListener(createMyButtonsListener())

拡張バージョンを提供するサブクラスでオーバーライドできます。

または、サブクラス (つまり ) でオーバーライドできるメソッドを追加しますmyExtraMethod()。匿名クラス内で呼び出されます。

于 2013-01-17T21:06:00.173 に答える