Chcę dodać OnLongClickListener
do mojego widoku listy. Za każdym razem, gdy użytkownik długo naciska element na liście, należy wykonać jakąś akcję, ale mój kod nie przechwytuje tego nasłuchiwania. Proszę, daj mi znać, gdzie popełniam błąd. Podobny kod działa setOnItemClickListener
bardzo dobrze.
Oto kod:
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView<?> arg0, View v,
int index, long arg3) {
// TODO Auto-generated method stub
Log.d("in onLongClick");
String str=listView.getItemAtPosition(index).toString();
Log.d("long click : " +str);
return true;
}
});
Odpowiedzi:
Musisz ustawić setOnItemLongClickListener () w ListView:
XML dla każdego elementu na liście (jeśli używasz niestandardowego XML) również musi mieć
android:longClickable="true"
(lub możesz użyć wygodnej metodylv.setLongClickable(true);
). W ten sposób możesz mieć listę z tylko niektórymi elementami reagującymi na długie kliknięcie.Mam nadzieję, że to ci pomoże.
źródło
lv.setLongClickable(true);
również.lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {...
Jeśli element wiersza ListView odwołuje się do oddzielnego pliku XML, pamiętaj, aby dodać
android:longClickable="true"
do tego pliku układu oprócz ustawieniasetOnItemLongClickListener()
do ListView.źródło
lub wypróbuj ten kod:
źródło
Myślę, że powyższy kod będzie działał na LongClick w widoku listy, a nie na poszczególnych elementach.
dlaczego nie używać
registerForContextMenu(listView)
. a następnie pobierz wywołanie zwrotne w OnCreateContextMenu.W większości przypadków będzie to działać tak samo.
źródło
W xml dodaj
W pliku java
spróbuj tego setOnItemLongClickListener ()
źródło
to powinno działać
nie zapomnij również o tym w swoim xml
android:longClickable="true"
lub jeśli masz widok niestandardowy, dodaj go do swojej klasy widoku niestandardowegoyouCustomView.setLongClickable(true);
tutaj jest wynik powyższego kodu
źródło
Wypróbowałem większość tych odpowiedzi i wszystkie kończyły się niepowodzeniem w przypadku TextViews, które miały włączone automatyczne łącza, ale musiały też użyć długiego naciśnięcia w tym samym miejscu!
Stworzyłem niestandardową klasę, która działa.
źródło
To zadziałało dla mnie w przypadku cardView i będzie działać tak samo dla widoku listy w kcalach adaptera, w ramach
onBindViewHolder()
funkcjiźródło
Jeśli chcesz to zrobić w adapterze, możesz po prostu zrobić to:
źródło
Zdecydowanie załatwia sprawę.
źródło