1. ホーム
  2. android

[解決済み] Androidです。複数のクリック可能なボタンを持つListView要素

2022-04-20 02:02:26

質問

私は ListView ここで、リストの各要素は、TextViewと2つの異なるButtonを含んでいます。このようなものです。

ListView
--------------------
[Text]
[Button 1][Button 2]
--------------------
[Text]
[Button 1][Button 2]
--------------------
... (and so on) ...

このコードで OnItemClickListener をアイテム全体に適用します。

listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> list, View view, int position, long id) {
        Log.i(TAG, "onListItemClick: " + position);

        }

    }
});

しかし、項目全体をクリックできるようにするのではなく、各リスト要素の2つのボタンだけをクリックできるようにしたい。

そこで質問なのですが、これらの2つのボタンに対して、以下のパラメータでonClickListenerを実装するにはどうしたらよいでしょうか。

  • int button (要素のどのボタンがクリックされたかを示します。)
  • int position (ボタンがクリックされたリスト内の要素)。

更新しました。 下記の回答にあるような解決策が見つかりました。これで、タッチパネルでボタンをクリック/タップできるようになりました。しかし、トラックボールで手動で選択することはできません。を設定しても、常にリスト項目全体が選択され、そこからボタンを無視して次のリスト項目に直接移動してしまいます。 .setFocusable(true)setClickable(true) のボタンに対して getView() .

また、このコードをカスタムリストアダプタに追加しました。

@Override
public boolean  areAllItemsEnabled() {
    return false;           
}

@Override
public boolean isEnabled(int position) {
        return false;
}

このため、リスト項目が全く選択できなくなりました。しかし、ネストされたボタンを選択可能にするのには役に立ちませんでした。

どなたか思い当たる方はいらっしゃいますか?

解決方法は?

この解決方法は、実は思ったより簡単です。単に、カスタムアダプタの getView() メソッドに、使用しているボタン用の setOnClickListener() を追加します。

ボタンに関連するデータはすべて myButton.setTag() の中で getView() で、onClickListener の中で view.getTag()

に詳しい解決策を投稿しました。 私のブログ をチュートリアルとして公開しました。