Herausforderungen RecyclerView in Android L
Ich habe das Spiel mit RecyclerView
für ein wenig. Gibt es einen einfachen Weg, um OnClickListener
für Elemente in RecyclerView
? Ich habe versucht, es umzusetzen in ViewHolder
. Das onClick-Ereignis nie ausgelöst.
Und ich habe notifyItemInserted(position)
für das hinzufügen von neuen Wert in RecyclerView
. Die UI nicht habe automatisch aktualisiert. Benötigt, um pull-up und down zu aktualisieren. Aber wenn ich rufe notifyDatasetChanged(..)
ist es ok.
Habe ich angewendet DefaultItemAnimator
zu RecyclerView
. Aber nicht sehen, jede animation, wenn neue Artikel Hinzugefügt.
Danke im Voraus für jede Idee.
Dies ist das erste Android-L-Komponente, die ich getestet habe und ich bin stucking es.
Hier ist mein Adapter-Klasse:
public class AdapterRecyclerView extends RecyclerView.Adapter<AdapterRecyclerView.MyViewHolder> {
private List<String> arrExperiences;
//Provide a reference to the type of views that you are using - Custom ViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView tvExperienceTitle;
public TextView tvExperienceDesc;
public MyViewHolder(RelativeLayout itemView) {
super(itemView);
tvExperienceTitle = (TextView) itemView.findViewById(R.id.tv_experience_title);
tvExperienceDesc = (TextView) itemView.findViewById(R.id.tv_experience_desc);
}
}
//Provide a suitable constructor : depending on the kind of dataset.
public AdapterRecyclerView(List<String> arrExperiences){
this.arrExperiences = arrExperiences;
}
//Create new view : invoke by a Layout Manager
@Override
public AdapterRecyclerView.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RelativeLayout view = (RelativeLayout) LayoutInflater.from(parent.getContext()).inflate(R.layout.view_item_recycler, parent, false);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(AdapterRecyclerView.MyViewHolder viewHolder, int position) {
//get element from your dataset at this position.
//replace the content of the view with this element.
viewHolder.tvExperienceTitle.setText(arrExperiences.get(position));
}
@Override
public int getItemCount() {
return arrExperiences.size();
}
public void addExperience(String experience, int position){
arrExperiences.add(position, experience);
notifyItemInserted(position);
//notifyDataSetChanged();
}
public void removeExperience(){
int index = (int) (Math.random() * arrExperiences.size());
arrExperiences.remove(index);
notifyItemRemoved(index);
//notifyDataSetChanged();
}
}
- Sie könnten versuchen, gist.github.com/grantland/cd70814fe4ac369e3e92
- Das ist genau das sagte ich oben. Der Kerl Umsetzung OnClickListener aus ViewHolder. Ich habe es versucht. Aber, onClick-Ereignis nie ausgelöst.
- Sein code ruft
setOnClickListener()
. Deins oben gezeigt nicht. - Wie haben Sie es geschafft pull to refresh in der RecyclerView?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fügen Sie einfach diese in Ihr Adapter:
Bitte siehe meine Antwort hier. Sie brauchen eine extra Klasse (die möglicherweise als Teil der vollständigen Version), aber es wird Ihnen erlauben, OnItemClickListeners die Art und Weise Sie werden verwendet, um für ListViews.
Da Sie noch nicht markieren, korrigieren, Antworten, und auch wenn es ist eine alte Frage, ich werde versuchen, so wie ich. Ich denke, es ist sehr sauber und Professionell. Die Funktionalitäten werden von verschiedenen blogs (ich habe noch zu erwähnen, in der Seite), zusammengeführt und die Methoden wurden verbessert, die Geschwindigkeit und Skalierbarkeit, die für alle Tätigkeiten, bei denen eine RecycleView.
https://github.com/davideas/FlexibleAdapter
Dass ich denke, es ist das ViewHolder das sollte halten die Zuhörer von den Klicks und, dass es getan werden sollte, die auf die Schaffung und nicht in der Binding-Methode (das heißt bei jedem ungültig aus Benachrichtigen...() ).
Beachten Sie auch, dass dieser adapter übernimmt die basic-Klicks: Einzel-und lange Klicks, wenn Sie benötigen ein Doppel-Tippen müssen Sie mit der Art und Weise Jabob Tabak tut in seiner Antwort.
Ich habe noch, es zu verbessern, so halten Sie ein Auge auf Sie. Ich möchte auch hinzufügen einige neue Funktionen, wie "Rückgängig machen".
Hier erhalten Sie eine einfache Adapter-Klasse, die ausführen können
onItemClick
auf jeden Fall an die Liste Zeile für dierecyclerview
.