web-dev-qa-db-ja.com

ListView OnItemClickListenerが応答しませんか?

私はこれに対する解決策をどこでも探しましたが、それを実装する方法がわかりません。行レイアウトにOnItemClickListenerがあるため、ListViewImageButton行で無効になり、フォーカスが引き継がれます。私が見つけた多くの質問がありましたが、それらのどれも私をどこでも得ませんでした。

this の質問をチェックしましたが、実際に頭や尻尾を作ることはできませんでした。行が押されたときに検出できるように、行をクリック可能にする方法が必要です。長押しとフォーカスは正常に機能します。

44
Kleptine

OnItemClickListenerの代わりに、アダプターから返された各ビューにOnClickListenerを追加します。リストを設定するsetItemsCanFocusを使用する必要があります。

ListView list = (ListView) findViewById(R.id.myList);
list.setAdapter(new DoubleClickAdapter(this));
list.setItemsCanFocus(true);

そして、あなたのAdaptergetViewで、これはクリック可能な行を生成します。ボタンは、膨張した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;
}
60
jqpubliq

ImageButtonの属性を設定します。

_Android:focusable="false"
_

_AbsListView.onTouchEvent_がchild.hasFocusable()をチェックするため。

51
meizilp

SDKレベル8および16で次のソリューションをテストしました。

getView()

_setFocusable(false);
setClickable(false);
_

アダプタのgetView()でそれらをtrueに設定するのではなく、元の質問が望んでいたと思うことを行い、OnItemClickListenergetView()

ビューのOnClickListenerでできることは、ListViewOnItemClickListenerでも同じように簡単にできると思います。 (ビューのsetOnClickListenerは、ビューを暗黙的にクリック可能に設定します。これにより、明らかにListViewの対応するOnItemClickListenerが呼び出されなくなります。)

動作は、アイテムが押されたりロールオーバーされたときのImageButtonの視覚的状態に関して、予想されるとおりです。

解決策は、ImageButton自体ではなく、押されているリストアイテムであるため、ボタンがリストアイテム全体を占めていない場合、アイテム内のどこかをクリックしてもボタンが描画可能になるというわずかな錯覚です。状態はクリックを反映しています。フォーカスについても同じです。それは支払う価値があるかもしれません。

10
JulianSymes

これは間違いなく機能します。これをレイアウト定義に追加します。

Android:descendantFocusability="blocksDescendants" 

解決策を見つけました こちら

7
Kapil Raju

最善の方法はこれです:

  Android:focusable="false"
  Android:focusableInTouchMode="false"

そのImagebuttonにこれらのプロパティを設定して、試してください。私

5
silentkratos

すべてのビューにOnClickListenerを設定する別の方法は、ImageButtonを使用しないことです。代わりにImageViewを使用します。 ImageViewは引き続きOnClickListenerにイベントを送信でき、フォーカスを引き継ぎません。

5
humbleCoder

この問題の私のバージョンでは、問題はTextViewオブジェクトをAndroid:inputType="textMultiLine"に設定したことでした。この行を削除すると、リストがクリックできないという問題はなくなりました。厄介な小さなバグのように見えます。

また、Android:minLines/Android:maxLinesプロパティを問題なく使用できるので、大きな問題ではありません。期待した解決策ではありません。

4
greg7gkb

私のために働いた代替ソリューションとして、あなたはBaseAdapterからアダプタを拡張しようとすることができます(ListAdapterインターフェースを実装する)

1
Pavel Dudka

次の行は私のプロジェクトの問題を解決しました。

<TextView ... Android:textIsSelectable="false" />
1
hogi

サブクラス化されたImageButtonとレイアウト定義の_setFocusable="false"_が機能しませんでした。サブクラスのコンストラクターでsetFocusable(false)を呼び出すことを解決しました。

0
Lukas Novak

ImageButtonの代わりにこのコードImageView nextpage= (ImageView)findViewById(R.id.btnEdit);を入れてください。現在、リスト項目はアクティブです

0
newb