Activity
kod klasowy:
conversationList = (ListView)findViewById(android.R.id.list);
ConversationArrayAdapter conversationArrayAdapter=new ConversationArrayAdapter(this, R.layout.conversation_list_item_format_left, conversationDetails);
conversationList.setAdapter(conversationArrayAdapter);
conversationList.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Log.d("test","clicked");
}
});
getView
Funkcji w Adapter
klasie:
if (v == null) {
LayoutInflater vi = (LayoutInflater)ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(leftSideMessageNumber.equals(m.getTo())) {
v = vi.inflate(R.layout.conversation_list_item_format_left, null);
} else {
v = vi.inflate(R.layout.conversation_list_item_format_right, null);
}
}
Czy jest problem z użyciem dwóch plików XML podczas pompowania?
Odpowiedzi:
Właśnie znalazłem rozwiązanie stąd, ale poprzez głębokie kliknięcie.
Jeśli jakikolwiek element listy na liście zawiera widok z możliwością zogniskowania lub klikalny
OnItemClickListener
, nie będzie działać.Element wiersza musi mieć parametr podobny do parametru
android:descendantFocusability = "blocksDescendants"
.Tutaj możesz zobaczyć przykładowy wygląd elementu listy. Element listy xml powinien być ...
row_item.xml
(your_xml_file.xml
)źródło
listView.setDescendantFocusability(int focus);
gdziefocus
jest jedenViewGroup.FOCUS_BEFORE_DESCENDANTS
,ViewGroup.FOCUS_AFTER_DESCENDANTS
lubViewGroup.FOCUS_BLOCK_DESCENDANTS
Problem polega na tym, że Twoje układy zawierają elementy, które można aktywować lub klikalne. Jeśli widok zawiera element, na którym można ustawić fokus lub klikalny element, OnItemCLickListener nie zostanie wywołany.
Kliknij tutaj, aby uzyskać więcej informacji.
Opublikuj jeden z plików XML swojego układu, jeśli tak nie jest.
źródło
EditText
s naTextView
s iCheckBox
pozwolono pozostać (i pozostać w stanie przełączalnym) zandroid:descendantFocusability="blocksDescendants"
dodanym do mojegoLinearLayout
.android:focusableInTouchMode="true"
wiersz, po usunięciu zaczął w końcu działać! :-)W przypadku moich list moje wiersze zawierają inne rzeczy, które można kliknąć, takie jak przyciski, więc robienie koca
blocksDescendants
nie działa. Zamiast tego dodałem wiersz w xml przycisku:To powstrzymuje przyciski przed blokowaniem kliknięć w wierszach, ale nadal pozwala przyciskom na klikanie.
źródło
musisz wykonać 2 kroki w pliku listview_item.xml
android:descendantFocusability="blocksDescendants"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
Oto przykład: listview_item.xml
źródło
clickable="true
w widoku elementu spowoduje, żeonItemClick
nie będzie wywoływany.clickable="false"
LinearLayout
użyj poniższego kodu wewnątrz znacznika przycisku w niestandardowym układzie wiersza widoku listy
źródło
android:descendantFocusability="blocksDescendants"
zablokować to pole wyboru dla kliknięciaMiałem ten sam problem i właśnie zobaczyłem, że przypadkowo ustawiłem:
w mojej klasie CustomListViewAdapter.
Zmieniając to na:
Udało mi się rozwiązać problem. Na wypadek, gdyby ktoś popełnił ten sam błąd ...
źródło
@Override public void onApplicationStart { ExplodeThisDevice(); }
Użyj Androida: descendantFocusability
Dodaj powyżej w układzie głównym
źródło
Rozwiązałem to za pomocą tej odpowiedzi
1. Dodaj następujące elementy w Układ liniowy list_items.xml
android:descendantFocusability="blocksDescendants"
2. Widoki dla dzieci LinearLayout w list_items.xml
źródło
jeśli masz widoki tekstu, przyciski lub stg, które można kliknąć lub wybrać tylko w widoku wiersza
nie wystarcza. Musisz ustawić
do twoich tekstów i
do przycisków i innych przedmiotów, na które można ustawić ostrość.
źródło
Nawet ja miałem ten sam problem, mam pole wyboru, wykonałem następujące czynności, aby zamaskować element itemClickListener,
Dodano następujące właściwości do pola wyboru,
i ItemClickListner zaczął działać.
Aby uzyskać szczegółowy przykład, możesz przejść przez link,
http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/
Mam nadzieję, że to pomaga na zdrowie !!
źródło
Miałem ten sam problem i wypróbowałem wszystkie wymienione rozwiązania bezskutecznie. dzięki testom odkryłem, że umożliwienie wyboru tekstu uniemożliwiało wywołanie słuchacza. Więc zmieniając go na false lub usuwając go, mój słuchacz został ponownie wywołany.
Mam nadzieję, że to pomoże komuś, kto utknął jak ja.
źródło
Dodaj to w głównym układzie
Napisz ten kod do każdego przycisku, Textview, ImageView itp., Które mają onClick
Mam nadzieję, że to zadziała.
źródło
Dwa niesamowite rozwiązania były takie: jeśli rozszerzając ListFragment z fragmentu, wiesz, że
mListView.setOnItemClickListener
nie zostanie wywołany przed utworzeniem działania, zapewniło to ustawienie, gdy działanie zostało utworzonePrzeglądając kod źródłowy ListFragment, natknąłem się na to
onItemClickListener
Obiekt jest przymocowany i wywołujeonListItemClick()
Jako taka innego podobnego rozwiązania, które działa w dokładnie taki sam sposób jest ręcznymonListItemClick()
źródło
w moim przypadku żadna z właściwości układu xml nie była pomocna.
Dodaję tylko jeden wiersz kodu w ten sposób: convertView.setClickable (false);
więc w zasadzie robi to samo, co konfigurowanie właściwości w układzie xml, ale w moim przypadku było to jedyne, co działa.
To nie jest idealne wyczucie czasu, ale może pomoże komuś w kodowaniu
źródło
Próbowałem wszystkich powyższych i NIC nie działało.
Rozwiązałem problem w następujący sposób:
Najpierw zdefiniuję niestandardowy przycisk o nazwie
ListButton
XML wygląda następująco:
Następnie definiuję własny
ButtonClicked
interfejs Listenera:Następnie używam własnego odbiornika, tak jakby to był normalny
OnClickListener
:źródło
Miałem ten sam problem, użyłem stylu dla moich tekstów w układzie wierszy, który miał atrybut „do zogniskowania”. Działa po tym, jak go usunąłem.
źródło
W moim przypadku musiałem usunąć następny wiersz z
Layout
źródło
Android: atrybut autoText umożliwia także automatyczne ustawianie ostrości TextView.
źródło
Jeśli chcesz użyć zarówno prostego kliknięcia, jak i długiego kliknięcia, zobacz elementy listy, lepszym sposobem na wdrożenie jest użycie menu kontekstowego dla długiego kliknięcia. Unikaj używania setItemLongClickListener, szczególnie jeśli masz wiele układów wierszy dla widoku listy.
źródło
W obliczu tego samego problemu, próbowany przez wiele godzin. Jeśli wypróbowałeś wszystkie powyższe, spróbuj zmienić układ_widoku widoku listy i elementu listy na match_parent z wrap_content.
źródło
Wszystkie powyższe zawiodły dla mnie. Jednak udało mi się rozwiązać problem (po wielu godzinach walenia głową - Google, jeśli słuchasz, rozważ naprawienie tego, co napotkałem poniżej, w postaci błędów kompilatora, jeśli to możliwe)
Naprawdę musisz uważać na to, jakie atrybuty Androida dodajesz tutaj do swojego układu xml (w tym oryginalnym pytaniu nazywa się to list_items.xml). Dla mnie problem polegał na tym, że przełączyłem się z widoku EditText na TextView i miałem resztkowy atrybut cruft po zmianie (w moim przypadku inputType). Kompilator go nie złapał, a klikalność po prostu się nie udała, kiedy poszedłem uruchomić aplikację. Dokładnie sprawdź wszystkie atrybuty, które masz w swoich węzłach xml układu.
źródło
Następnie w swojej działalności użyj adapter.setOnItemClickListener () przed dołączeniem go do widoku listy.
Skopiowane z github działało dla mnie
źródło
Rzeczą, która działała dla mnie, było dodanie poniższego kodu do każdego widoku podrzędnego w układzie mojego pliku row.xml:
Więc w moim przypadku:
Oto moje wywołanie setOnItemClickListener w mojej podklasie Fragment:
Mam stąd odpowiedź !
źródło
Rozwiązałem problem, usuwając klikalne widoki z listy.
źródło