Activity
kode kelas:
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");
}
});
The getView
fungsi dalam Adapter
kelas:
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);
}
}
Apakah ada masalah dengan menggunakan dua xml saat menggembung?
Jawaban:
Saya baru saja menemukan solusi dari sini, tetapi dengan mengklik dalam.
Jika ada item baris daftar berisi tampilan yang dapat difokus atau diklik maka
OnItemClickListener
tidak akan berfungsi.Item baris harus memiliki param seperti
android:descendantFocusability = "blocksDescendants"
.Di sini Anda dapat melihat contoh tampilan item daftar Anda. Item daftar xml Anda harus ...
row_item.xml
(your_xml_file.xml
)sumber
listView.setDescendantFocusability(int focus);
manafocus
salah satunyaViewGroup.FOCUS_BEFORE_DESCENDANTS
,ViewGroup.FOCUS_AFTER_DESCENDANTS
atauViewGroup.FOCUS_BLOCK_DESCENDANTS
Masalahnya adalah tata letak Anda berisi item yang dapat difokus atau diklik. Jika tampilan berisi item yang dapat difokus atau diklik, OnItemCLickListener tidak akan dipanggil.
Klik di sini untuk informasi lebih lanjut.
Silakan kirim salah satu xml tata letak Anda jika itu tidak terjadi.
sumber
EditText
s keTextView
s, danCheckBox
diizinkan untuk tetap (dan tetap dapat beralih) denganandroid:descendantFocusability="blocksDescendants"
menambahkan ke sayaLinearLayout
.android:focusableInTouchMode="true"
untuk baris, setelah dihapus mulai bekerja pada akhirnya! :-)Untuk daftar saya, baris saya memiliki hal-hal lain yang dapat diklik, seperti tombol, jadi melakukan selimut
blocksDescendants
tidak berfungsi. Sebagai gantinya saya menambahkan baris di tombol xml:Itu membuat tombol-tombol itu tidak memblokir klik pada baris, tetapi tetap membiarkan tombol mengambil klik.
sumber
Anda perlu melakukan 2 langkah di listview_item.xml Anda
android:descendantFocusability="blocksDescendants"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false"
Berikut ini contohnya: listview_item.xml
sumber
clickable="true
pada tampilan item akan membuatonItemClick
tidak dipanggil. Jadi perhatikan juga tambahkanclickable="false"
pada tampilan root item, dalam hal ini adalahLinearLayout
gunakan kode di bawah ini di dalam tag tombol dalam tata letak baris kustom listview
sumber
android:descendantFocusability="blocksDescendants"
dan memblokir kotak centang ini untuk klikSaya memiliki masalah yang sama dan saya baru saja melihat bahwa saya tidak sengaja mengatur:
di kelas CustomListViewAdapter saya.
Dengan mengubah ini menjadi:
Saya sudah berhasil memperbaiki masalah. Untuk berjaga-jaga jika seseorang telah melakukan kesalahan yang sama ...
sumber
@Override public void onApplicationStart { ExplodeThisDevice(); }
Gunakan android: descendantFocusability
Tambahkan di atas dalam tata letak root
sumber
Saya menyelesaikannya dengan bantuan jawaban ini
1.Tambahkan berikut ini di Layout Linear dari list_items.xml
android:descendantFocusability="blocksDescendants"
2. Tampilan Anak dari LinearLayout di list_items.xml
sumber
jika Anda memiliki tampilan teks, tombol atau stg dapat diklik atau dipilih hanya dalam tampilan baris Anda
tidak cukup. Anda harus mengatur
ke tampilan teks Anda dan
ke tombol Anda dan item yang bisa fokus lainnya.
sumber
Bahkan saya mengalami masalah yang sama, saya memiliki kotak centang, melakukan hal berikut untuk masker itemClickListener bekerja,
Menambahkan properti berikut ke kotak centang,
dan ItemClickListner mulai bekerja.
Sebagai contoh terperinci, Anda dapat menelusuri tautan,
http://knowledge-cess.com/android-itemclicklistner-with-checkbox-or-radiobutton/
Semoga ini bisa membantu Ceria !!
sumber
Saya memiliki masalah yang sama dan mencoba semua solusi yang disebutkan tidak berhasil. melalui pengujian saya menemukan bahwa membuat teks yang dipilih mencegah pendengar dipanggil. Jadi dengan mengalihkannya ke false, atau menghapusnya, pendengar saya dipanggil lagi.
Semoga ini bisa membantu seseorang yang terjebak seperti saya.
sumber
Tambahkan ini di Tata Letak utama
Tulis kode ini ke setiap tombol, Textview, ImageView dll yang ada diKlik
Semoga ini berhasil.
sumber
Dua solusi yang luar biasa adalah ini, jika ListFragment Anda yang diperluas dari sebuah fragmen, tahu bahwa
mListView.setOnItemClickListener
tidak akan dipanggil sebelum aktivitas Anda dibuat, ini memastikan itu diatur ketika aktivitas telah dibuatSambil melihat kode sumber untuk ListFragment, saya menemukan ini
Sebuah
onItemClickListener
objek terpasang dan panggilanonListItemClick()
Dengan demikian solusi lain yang sejenis, yang bekerja dengan cara yang sama persis adalah untuk overrideonListItemClick()
sumber
dalam kasus saya tidak ada properti tata letak xml tidak membantu.
Saya baru saja menambahkan satu baris kode seperti ini: convertView.setClickable (false);
jadi pada dasarnya ia melakukan hal yang sama seperti mengatur properti dalam tata letak xml tapi itu hanya hal yang berfungsi dalam kasus saya.
Ini bukan waktu yang tepat tapi mungkin itu akan membantu seseorang Happy coding
sumber
Saya sudah mencoba semua hal di atas dan TIDAK ADA yang berhasil.
Saya memecahkan masalah sebagai berikut:
Pertama saya mendefinisikan Tombol kustom yang disebut
ListButton
XML terlihat seperti:
Lalu saya mendefinisikan
ButtonClicked
antarmuka Pendengar saya sendiri :Lalu saya menggunakan pendengar saya sendiri seolah-olah itu normal
OnClickListener
:sumber
Saya memiliki masalah yang sama, saya menggunakan gaya untuk teks saya di tata letak baris yang memiliki atribut "fokus". Ini berhasil setelah saya menghapusnya.
sumber
Dalam kasus saya, saya harus menghapus baris berikutnya dari
Layout
sumber
Atribut Android: autoText juga membuat TextView otomatis menjadi fokus.
sumber
Jika Anda ingin menggunakan klik sederhana dan klik lama pada item tampilan daftar cara yang lebih baik untuk menerapkan itu akan menggunakan menu konteks untuk klik panjang. Hindari menggunakan setItemLongClickListener terutama jika Anda memiliki beberapa tata letak baris untuk tampilan daftar Anda.
sumber
Menghadapi masalah yang sama, dicoba berjam-jam. Jika Anda telah mencoba semua hal di atas daripada mencoba mengubah layout_width dari Listview dan daftar item menjadi match_parent dari wrap_content.
sumber
Semua hal di atas gagal untuk saya. Namun, saya dapat menyelesaikan masalah (setelah beberapa jam membenturkan kepala - Google, jika Anda mendengarkan, pertimbangkan untuk memperbaiki apa yang saya temui di bawah ini dalam bentuk kesalahan kompiler, jika mungkin)
Anda benar-benar harus berhati-hati dengan atribut android apa yang Anda tambahkan ke tata letak xml Anda di sini (dalam pertanyaan asli ini, disebut list_items.xml). Bagi saya, yang menyebabkan masalah adalah bahwa saya telah beralih dari tampilan EditText ke TextView dan memiliki sisa atribut cruft dari perubahan (dalam kasus saya, inputType). Kompiler tidak menangkapnya dan kemampuan klik hanya gagal ketika saya menjalankan aplikasi. Periksa ulang semua atribut yang Anda miliki di tata letak xml node Anda.
sumber
Kemudian dalam aktivitas Anda, gunakan adapter.setOnItemClickListener () sebelum melampirkannya ke tampilan daftar.
Disalin dari github, itu berhasil untuk saya
sumber
Hal yang berhasil bagi saya adalah menambahkan kode di bawah ini ke setiap subview di dalam tata letak file row.xml saya:
Jadi dalam kasus saya:
Dan ini adalah panggilan setOnItemClickListener saya di subkelas Fragmen saya:
Saya mendapat jawabannya dari sini !
sumber
Saya memecahkan masalah dengan menghapus tampilan yang dapat diklik dari daftar.
sumber