があるとしListView
ます。それListView
はアイテムを持っています。そのアイテムにはサブアイテム (ボタンなど) があります。
この目的のためにアダプターのサブクラスを使用するためgetView()
、Adaptor
. そのサブアイテムのクリック イベントをアクティビティの何らかのメソッドで受け取りたいと考えていますListView
。私の問題がよく説明されていることを願っています。
最適なアプローチはどれですか?
があるとしListView
ます。それListView
はアイテムを持っています。そのアイテムにはサブアイテム (ボタンなど) があります。
この目的のためにアダプターのサブクラスを使用するためgetView()
、Adaptor
. そのサブアイテムのクリック イベントをアクティビティの何らかのメソッドで受け取りたいと考えていますListView
。私の問題がよく説明されていることを願っています。
最適なアプローチはどれですか?
最適なアプローチはどれですか?
最善のアプローチはないと思います。必要なものを実装する簡単でクリーンな方法の 1 つは、サブ項目イベントの汎用リスナーを実装し、それらをインターフェイス (によって実装Activity
) を介して渡すことです。
public interface OnButtonEventListener {
void onSubButtonClicked(int parentRowPosition);
}
あなたのアクティビティは、このインターフェースを実装します。
次に、アダプターで汎用リスナーを作成します。
private OnButtonEventListener mBtnListener; // as you'll pass a Context to your adapter, the Activity which implements the OnButtonEventListener
private void OnClickListener mListener = new OnClickListener() {
@Override
public void onClick(View v) {
Integer rowPosition = (Integer) v.getTag();// you could pass other data as well
mBtnListener.onButtonClicked(rowPosition);
}
}
次に、アダプターの getView メソッドで:
//...
Button b = ...find the Button
b.setTag(Integer.valueOf(position));
b.setOnClickListener(mListener);
//
このアプローチを使用すると、後で行うことにした場合に、イベント ブロードキャストを他のサブ項目のアクティビティに簡単に追加できます。