Neden't RecyclerView onİtemClickListener yok()? Ve nasıl RecyclerView Liste Görünümü farklıdır?
Doğru soruyu sordum mu bilmiyorum. RecyclerView
keşfediyordum ve RecyclerView
onItemClickListener()
olmadığını görünce çok şaşırdım. RecyclerView
genişletir çünkü
android.görünüm.ViewGroup
ve ListView
uzanır
android.widget.AbsListView
. Ancak RecyclerView.Adapter
benim: onClick
yazarak sorunumu çözdüm
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
public TextView txtViewTitle;
public ImageView imgViewIcon;
public ViewHolder(View itemLayoutView) {
super(itemLayoutView);
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
}
@Override
public void onClick(View v) {
}
}
Ama hala onItemClickListener()
kaldırıldı neden bilmek istiyorum?
Bir performans sorunu veya başka bir şey var mı?
CEVAP
tl;drhttp://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
12*, onItemClickListener
*beri giriş sorunlu olmuştur. O anda bir tık dinleyici için herhangi bir iç öğeleri geri olmaz tetikledi ama değildi Tebliğ veya iyi belgelenmiş (eğer) bu yüzden bir çok karışıklık ve soru hakkında.
Verilen RecyclerView
alır bir adım daha ileri ve yok kavramını bir satır/sütun, bir ya da daha çok keyfi olarak düzenlendiği miktarın çocuklar, onlar temsil edilen özelliği her biri, ya da programcı uygulanması.
Karmaşık durumlarda kullanmak için daha esnek bir bileşen olarak *1:1* 16 yerine değil Recyclerview
düşün. Ve dediğiniz gibi, çözüm google sana ne bekleniyor. Şimdi bir arayüzü ListView
Recyclerview
hem de doğru deseni olan yapıcı, kabul etmek özelliği temsilci edebilecek bir adaptör var.
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
public TextView txtViewTitle;
public ImageView imgViewIcon;
public IMyViewHolderClicks mListener;
public ViewHolder(View itemLayoutView, IMyViewHolderClicks listener) {
super(itemLayoutView);
mListener = listener;
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
imgViewIcon.setOnClickListener(this);
itemLayoutView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v instanceof Imageview){
mListener.onTomato((ImageView)v)
} else {
mListener.onPotato(v);
}
}
public static interface IMyViewHolderClicks {
public void onPotato(View caller);
public void onTomato(ImageView callerImage);
}
}
ve sonra adaptör üzerinde
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
String[] mDataset = { "Data" };
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.my_layout, parent, false);
MyAdapter.ViewHolder vh = new ViewHolder(v, new MyAdapter.ViewHolder.IMyViewHolderClicks() {
public void onPotato(View caller) { Log.d("Poh-tah-tos"); };
public void onTomato(ImageView callerImage) { Log.d("To-m8-tohs"); }
});
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
// Get element from your dataset at this position
// Replace the contents of the view with that element
// Clear the ones that won't be used
holder.txtViewTitle.setText(mDataset[position]);
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return mDataset.length;
}
...
Şimdi kod son parçayı da içine bak: onCreateViewHolder(ViewGroup parent, int viewType)
imza zaten farklı görünüm türlerini öneririm. Bunların her biri için farklı bir viewholder çok ihtiyacınız olacak, ve daha sonra her bir tıklama farklı bir dizi olabilir. Ya da sadece herhangi bir görünüm ve 22 ** bir tane alır ve buna göre geçerli bir genel viewholder oluşturabilirsiniz. Ya da bazı parçalar var bu yüzden duvarı için bir düzey temsilci/etkinlikler farklı tıklama davranışı ile aynı liste var. Yine, tüm esneklik sizden yana.
Gerçekten gerekli bir bileşen ve bizim iç ve uygulamaları ListView
iyileştirmeler şimdiye kadar ne oldukça yakın. Google sonunda kabul iyi oldu.
Nasıl RecyclerView ile sonsuz bir list...
RecyclerView Liste Görünümü değiştirme...
Nasıl Android Liste Görünümü ayırıcı ç...
Nasıl Android liste görünümü yenilemek...
Nasıl çökmeden bir ScrollView içine bi...