2011-09-28 4 views
14

Mybutton.javaのようなカスタムコンポーネントを作成しました。 Mybutton.javaにonclickリスナーを設定しました。ワン・ボタンのアンドロイド・マルチ・オン・クリック・リスナー

私の新しい活動では、Mybutton を呼び出して、onclickリスナーにコンテンツを追加する必要があります。

ただし、私がOnClickListener mClickListener = new OnClickListener(){...... を使用すると、古いコンテンツが置き換えられます。 古いリスナーと新しいリスナーを一緒にやりたいと思っています。

いくつかの情報を検索しましたが、このメソッドを実装できることがわかりました。 多くの試みの後、私はまだエラーが発生しています。

誰でも簡単な例を教えてください 私はそれを変更することを学ぶことができますか?

+0

私はあなたが複数のリスナーを持ちたい理由はわからない、あなたは私のユースケースを伝えることはできますか? – CommonMan

+0

MyButton.javaとは何ですか?それはandroid Buttonクラスを拡張するクラスを含むファイルですか? –

答えて

32

複数のonClickリスナーを許可するAPIはAndroid APIにはないと思います。あなたは単一のonClick()を扱ういくつかのカスタムクラスを必要とし、それを呼び出すハンドラを渡します。このような何か:

private class CompositeOnClickListener implements View.OnClickListener{ 
    List<View.OnClickListener> listeners; 

    public CompositeOnClickListener(){ 
     listeners = new ArrayList<View.OnClickListener>(); 
    } 

    public void addOnClickListener(View.OnClickListener listener){ 
     listeners.add(listener); 
    } 

    @Override 
    public void onClick(View v){ 
     for(View.OnClickListener listener : listeners){ 
      listener.onClick(v); 
     } 
    } 
} 

あなたがあなたのボタンを設定し、実行します。

CompositeOnClickListener groupListener = new CompositeOnClickListener(); 
myButton.setOnClickListener(groupListener); 

を次に、あなたは別のリスナーを追加したい時はいつでも、ちょうどあなたがあなたのカスタムを作成することができ

groupListener.addOnClickListener(new View.OnClickListener(){ 
    @Override 
    public void onClick(View v){ 
     **** Custom implementation **** 
    } 
}); 
+0

私はButtonを拡張し、View.OnClickListenerを実装する私のカスタムクラスを作ろうとしていましたが、残念ながらonClick()メソッドは実装されませんでした:/ – BlueMan

+0

新しいクラスを実装する場合は、 'setOnClickListener'です。ビューを直接オーバーライドしている場合は、 'onClick()'を直接オーバーライドして処理できます。 – DeeV

+0

私はOnTouchListenerのための並べ替えの何かが必要でしたが、これは私にしばらく時間を節約しました!ありがとう@DeV – alchemist

4

を呼び出しますButtonクラスは次のようになります:

public class MyButton extends Button { 

    private CustomOnClickListener mCustomOnClickListener; 

    public interface CustomOnClickListener { 
     void onClick(View v); 
    } 


    public MyButton(Context context) { 
     super(context); 

     // Set your own onClickListener 
     View.OnClickListener ocl = new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // Do whatever you want to do 

       // Invoke the other added onclick listener 
       if(mCustomOnClickListener != null) { 
        mCustomOnClickListener.onClick(v); 
       } 
      } 
     }; 
     setOnClickListener(ocl); 
    } 

    // use this function to set the other onclick listener 
    public void setCustomOnClickListener(CustomOnClickListener cl) { 
     mCustomOnClickListener = cl; 
    } 

    } 

とは、このようにそれを使用します。

// create your button 
    MyButton button = new MyButton(context); 
    // add your custom onClickListener 
    button.setCustomOnClickListener(new MyButton.CustomOnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // Do whatever you intend to do after the actual onClickListener 
      // from MyButton class has been invoked. 
     } 
    }); 
関連する問題