私はこれに対する解決策をどこでも探しましたが、それを実装する方法がわかりません。行レイアウトにOnItemClickListener
があるため、ListView
がImageButton
行で無効になり、フォーカスが引き継がれます。私が見つけた多くの質問がありましたが、それらのどれも私をどこでも得ませんでした。
this の質問をチェックしましたが、実際に頭や尻尾を作ることはできませんでした。行が押されたときに検出できるように、行をクリック可能にする方法が必要です。長押しとフォーカスは正常に機能します。
OnItemClickListenerの代わりに、アダプターから返された各ビューにOnClickListenerを追加します。リストを設定するsetItemsCanFocus
を使用する必要があります。
ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);
そして、あなたのAdapterのgetView
で、これはクリック可能な行を生成します。ボタンは、膨張したxmlにあると想定されます。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(context, R.layout.cell, null);
view.setClickable(true);
view.setFocusable(true);
view.setBackgroundResource(Android.R.drawable.menuitem_background);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
new AlertDialog.Builder(context).setTitle("touched").show();
}
});
return view;
}
ImageButton
の属性を設定します。
_Android:focusable="false"
_
_AbsListView.onTouchEvent
_がchild.hasFocusable()
をチェックするため。
SDKレベル8および16で次のソリューションをテストしました。
getView()
で
_setFocusable(false);
setClickable(false);
_
アダプタのgetView()
でそれらをtrueに設定するのではなく、元の質問が望んでいたと思うことを行い、OnItemClickListener
がgetView()
。
ビューのOnClickListener
でできることは、ListView
のOnItemClickListener
でも同じように簡単にできると思います。 (ビューのsetOnClickListener
は、ビューを暗黙的にクリック可能に設定します。これにより、明らかにListView
の対応するOnItemClickListener
が呼び出されなくなります。)
動作は、アイテムが押されたりロールオーバーされたときのImageButton
の視覚的状態に関して、予想されるとおりです。
解決策は、ImageButton
自体ではなく、押されているリストアイテムであるため、ボタンがリストアイテム全体を占めていない場合、アイテム内のどこかをクリックしてもボタンが描画可能になるというわずかな錯覚です。状態はクリックを反映しています。フォーカスについても同じです。それは支払う価値があるかもしれません。
最善の方法はこれです:
Android:focusable="false"
Android:focusableInTouchMode="false"
そのImagebutton
にこれらのプロパティを設定して、試してください。私
すべてのビューにOnClickListener
を設定する別の方法は、ImageButton
を使用しないことです。代わりにImageView
を使用します。 ImageView
は引き続きOnClickListener
にイベントを送信でき、フォーカスを引き継ぎません。
この問題の私のバージョンでは、問題はTextView
オブジェクトをAndroid:inputType="textMultiLine"
に設定したことでした。この行を削除すると、リストがクリックできないという問題はなくなりました。厄介な小さなバグのように見えます。
また、Android:minLines/Android:maxLines
プロパティを問題なく使用できるので、大きな問題ではありません。期待した解決策ではありません。
私のために働いた代替ソリューションとして、あなたはBaseAdapter
からアダプタを拡張しようとすることができます(ListAdapter
インターフェースを実装する)
次の行は私のプロジェクトの問題を解決しました。
<TextView ... Android:textIsSelectable="false" />
サブクラス化されたImageButton
とレイアウト定義の_setFocusable="false"
_が機能しませんでした。サブクラスのコンストラクターでsetFocusable(false)
を呼び出すことを解決しました。
ImageButton
の代わりにこのコードImageView nextpage= (ImageView)findViewById(R.id.btnEdit);
を入れてください。現在、リスト項目はアクティブです