Mam ListView
, gdzie każdy element na liście zawiera TextView i dwa różne przyciski. Coś takiego:Android: Elementy ListView z wieloma klikalnymi przyciskami
ListView
--------------------
[Text]
[Button 1][Button 2]
--------------------
[Text]
[Button 1][Button 2]
--------------------
... (and so on) ...
Z tym kodem mogę utworzyć OnItemClickListener
dla całego elementu:
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> list, View view, int position, long id) {
Log.i(TAG, "onListItemClick: " + position);
}
}
});
Jednakże nie chcę cały element do klikania, ale tylko dwa przyciski każdego elementu listy.
Więc moje pytanie jest, w jaki sposób zaimplementować onClickListener dla tych dwóch przycisków z następującymi parametrami:
int button
(który został wciśnięty przycisk elementu)int position
(która jest elementem w liście, w którym kliknij przycisk stało)
Aktualizacja: Znalazłem rozwiązanie opisane w mojej odpowiedzi poniżej. Teraz mogę kliknąć/dotknąć przycisk na ekranie dotykowym. Jednak nie mogę ręcznie wybrać go za pomocą trackballa. Zawsze wybiera cały element listy i stamtąd przechodzi bezpośrednio do następnego elementu listy ignorując przyciski, mimo że ustawiłem .setFocusable(true)
i setClickable(true)
dla przycisków w getView()
.
Dodałem też ten kod do mojego niestandardowej listy adaptera:
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return false;
}
To powoduje, że żaden element listy jest wybierana w ogóle więcej. Ale nie pomogło to w wyborze przycisków zagnieżdżonych.
Masz pomysł?
Czy nadal są potrzebne? –
Jeśli spojrzysz na kod BaseAdapter, zobaczysz, że funkcje AreAIllEtemsEnabled() i isEnabled() są po prostu zakodowane na prawdę, co czyni je prostymi symbolami zastępczymi bez żadnej logiki. –
Co jeśli chcę użyć SimpleCursorAdapter? Czy muszę zrobić niestandardowy adapter rozszerza simplecursoradapter? – oratis