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カスタムリストビューでアイテムをクリックできません から詳細を確認してください。
リストアイテム内にImageButtonsがある場合、以下を追加する必要があります。
Android:descendantFocusability="blocksDescendants"
ルートリストアイテム要素[ルートレイアウトなど].
次に、リストアイテムの各ImageButton内に、以下を追加する必要があります。
Android:focusableInTouchMode="true"
これでうまくいきましたが、標準のボタンではなく、ImageButtonを使用していました。
また、設定しようとしたのと同じ問題に直面しましたAndroid:focusable="false"
リストビューに機能しますが、機能しません。これをリストビューアイテムに追加します。リストビューアイテムのように、問題を発生させていたトグルボタンを使用したように、Android:focusable="false"
トグルボタンとアイテムクリックリスナーのリストビューへの作業の再開
ListViewに次の行を追加します
Android:choiceMode="singleChoice"
または、レイアウトテキストフィールドに次の行を設定してください
Android:focusable="false"
Android:focusableInTouchMode="false"
Android:clickable="false"
OnTouchEventをリストビュー項目に記述し、適切なtouchEventを子ビューであるボタンに送信することを検討できます。
ListViewのボタンの問題もありました。残念ながら、アダプターのすべてのオブジェクトのフォーカスをfalseに設定するだけではうまくいきませんでした。
現在、回避策があります。
アダプタで、ボタン(またはその他のクリック可能なオブジェクト)のOnClickListenerをまだ作成していない場合は作成します。そのOnClickListenerで、OnItemClickListenerを自分で呼び出します。
public void onClick(View v) {
mOnItemClickListener.setOnItemClick(mListView, v, vPos, vId);
}
つまり、アダプターに親のListViewとOnItemClickListenerの両方へのアクセスを許可する必要があります。
上記のソリューションがどれも機能しないことはわかっていますが、xml属性を変更しようとしましたが、うまくいきませんでしたが、新しい方法で実装しました。方法は次のとおりです。
interfaceCheckBoxOnCheckListener
をメソッドonCheckBoxChecked
で作成し、必要なパラメーターを渡し、listViewを含むアクティビティまたはfragmentにインターフェイスCheckBoxOnCheckListener
を実装します。
次に、アダプターでmListener
をCheckBoxOnCheckListener
として宣言し、これをパラメーターとしてfragment/activity
からアダプターのコンストラクターに渡し、CheckBoxOnCheckListener
にキャストしてmListener
に割り当てます。
次に、mListener
をitemView.onClick
またはCheckBox.onCheckCheckedListener
およびonCheckChanged
メソッド呼び出しmListener.onCheckBoxChecked
として設定します。
それでおしまい。それは間違いなく動作します、それは私のために働いた。コードは午後だけです。