onitemclicklistenerは、ボタンを含むListViewアイテムでは動作しません
-
29-10-2019 - |
質問
私は持っている ListView
カスタムで Adapter
どちらが供給しますか View
に ListView
この上:
public View getView(int position, View convertView, ViewGroup parent)
{
RelativeLayout.LayoutParams lineParams;
RelativeLayout line=new RelativeLayout(context);
TextView tv=new TextView(context);
tv.setText("Text in postion="+i);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
line.addView(tv, lineParams);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
//checkbox
CheckBox checkBox=new CheckBox(context);
lineParams=new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lineParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
lineParams.addRule(RelativeLayout.CENTER_IN_PARENT);
line.addView(checkBox, lineParams);
return line;
}
そして内部のどこか ListView
あります setOnItemClickListener()
, 、アイテムをクリックするイベントを傍受する必要があります。私の問題、アイテムにチェックボックスを追加しようとするときはいつでも - 私は自分の尊敬を得られません ListView
. 。スキップしたら CheckBox
またはその他 Button
できます。
私はこの問題に本当に固執しています。私はあらゆる種類のレイアウトを試してみました。ように見えます CheckBox
干渉する ListView
アイテムクリックイベント。
克服する方法はありますか?
解決
ListView自体の代わりに、この行をアイテムビューに追加するだけです
android:focusable="false"
これについての詳細を確認してください Android Custom ListViewアイテムをクリックできません
他のヒント
リスト項目内にImageButtonsがある場合は、追加する必要があります。
android:descendantFocusability="blocksDescendants"
ルートリストアイテム要素[ルートレイアウトなど]。
次に、リスト項目の各画像ボタン内で、次のことを追加する必要があります。
android:focusableInTouchMode="true"
これは私のために機能しました - しかし、私は標準ボタンではなく、ImageButtonsを使用していました。
また、設定しようとしたのと同じ問題に直面しています android:focusable="false"
listViewには機能しませんが、これをListViewアイテムに追加します。リストビューアイテムのように、問題を作成しているトグルボタンがあります。 android:focusable="false"
アイテム]の[リスト]ボタンを切り替えて[リスナー]をクリックして、再び作業を開始します
ListViewに次の行を追加します
android:choiceMode="singleChoice"
または、レイアウトテキストフィールドに次の行を設定してください
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
また、リストビューにボタンの問題がありました。残念ながら、私のアダプター内のすべてのオブジェクトのフォーカスを偽に設定するだけでは、私にとっては機能しませんでした。
私は今回避策を持っています。
アダプターで、まだ行っていない場合は、ボタン(または他のクリック可能なオブジェクト)のonClickListenerを作成します。そのonclickListenerでは、onitemclicklistenerを自分で呼びます。
public void onClick(View v) {
mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}
これは、親リストビューとonitemclickListenerの両方にアダプターアクセスを提供する必要があることを意味します。
ListViewアイテムにOntoucheventを書いて、適切なTouchEventを子供のビュー、ボタンに送信することを検討できます。
上記のソリューションはどれも機能しないことを知っています。XML属性を変更しようとしましたが、それらはうまくいきませんが、新しい方法で実装しました。方法は次のとおりです。
作成します インターフェース CheckBoxOnCheckListener
メソッド付き onCheckBoxChecked
必要なパラメーターを渡し、インターフェイスを実装します CheckBoxOnCheckListener
あなたの中で アクティビティ また 断片 含む リストビュー.
次にアダプターで、宣言します mListener
なので CheckBoxOnCheckListener
, 、そしてこれをアダプターのコンストラクターへのパラメーターとして渡します fragment/activity
そしてそれをキャストします CheckBoxOnCheckListener
に割り当てます mListener
.
次のセット mListener
なので itemView.onClick
また CheckBox.onCheckCheckedListener
と onCheckChanged
メソッド呼び出し mListener.onCheckBoxChecked
.
それでおしまい。それは間違いなく機能します、それは私のために働きました。コードだけのPMの場合。
使用している場合 ListView
の Activity
, 、セットアップがあることを確認してください setOnItemClickListener()
myListView.setOnItemClickListener(this); // if your activity implement OnItemClickListener