1

静的メソッドに onClickListener を追加することは可能ですか?

Crouton (Cyril Mottier の記事に基づく Ben Weiss の実装) にいくつかの一般的な変更を加える便利なクラスを作成しようとしています。フォークされたバージョン(ソースを変更した場所)がありましたが、依存しているライブラリプロジェクトを削減しようとしており、代わりに彼が提供するjarをMavenに含めることを選択していますが、クラスは次のように設定されていますfinalだからそこから伸ばすことはできません。

私がやったことは次のとおりです。

public class CroutonEx {

    static Crouton crouton;

    ...

    public static Crouton makeDismissOnClick(Crouton crouton) {
        CroutonEx.crouton = crouton;
        return crouton.setOnClickListener(new View.OnClickListener() {            
            @Override
            public void onClick(View v) {
                Crouton.hide(CroutonEx.crouton);                
            }
        });
    }
}

私の質問は次のとおりです。

  • が起動されたときonClick(View v)、現在 に保存されている Crouton をCroutonEx.crouton非表示にしますか、それともリスナーが登録された時点で参照していた Crouton を非表示にしますか? つまり、私の場合、常に同じものになります(リスナーを設定した直後にクルトンが表示され、数秒間だけ、一度に1つだけ表示されます)が、一般的なケースでは保証されています(参照するメモリ内のオブジェクトに関して)?

  • これがうまくいくとしても、明らかに理想的な方法ではありません。この特定のケースで問題が発生することはないと思いますが(複数のスレッドが一度にこのメソッドにアクセスする方法は考えられません(クルトンはメイン/UIスレッドにのみ追加されます))、より良い方法はありますかユーティリティクラスにリスナーを追加するか、それともまったく推奨されませんか?

ありがとう!

(これは Android プロジェクト用ですが、関連性がないと思ったのでタグを追加しませんでした。)

4

0 に答える 0