Ich möchte OnClickListener
auf meine Songs RecyclerView
implementieren. Wenn ich auf ein Objekt klicke, wird das OnClick-Ereignis ausgelöst, aber es wird auf mehr als ein Objekt ausgelöst. aber es sollte für den Gegenstand abgefeuert werden, den ich angezapft habe. Es wird auch auf zufällige Reihen von RecyclerView
gefeuert. zum Beispiel, wenn ich auf die erste Zeile von RecyclerView
klicke, wird OnClick-Ereignis auf zufällige Positionen, sagen am 7., 15., 28. .... 112. viel mehr gefeuert. Ich denke, es wird recycelt, so dass dies passiert.OnClickListener von RecyclerView funktioniert nicht richtig
Zuerst wurde es nicht auf zufällige Positionen gefeuert. zum Beispiel, wenn ein Klick auf die 1. Position auf ein Klick-Ereignis auf die erste Position und auch auf den 12., 21., 31., d.h. auf jede 12. Position, gefeuert wurde. es war periodisch, aber jetzt ist es nur zufällig.
Ich habe versucht, viele Methoden wie:
http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
https://stackoverflow.com/a/24746411/4754718
Ich habe auch viele andere Methoden ausprobiert, aber leider kann ich nicht Link zur Verfügung stellen, weil ich, dass mehr als 10 Ruf benötigen, sorry.
Folgende ist meine viewholder Klasse:
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.ImageButton;
import android.widget.TextView;
/**
* Created by anunay on 7/11/2016.
*/
public class SongsViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView songName;
public TextView artistName;
public TextView songDuration;
public ImageButton expandChild;
public Button playNow;
public Button playNext;
public Button addToQueue;
public Button addToPlayList;
public Button editMetadata;
public Button delete;
public static HorizontalScrollView horizontal_scroll;
public SongsViewHolder(final View itemView) {
super(itemView);
songName = (TextView) itemView.findViewById(R.id.songNameText);
artistName = (TextView) itemView.findViewById(R.id.artistNameText);
songDuration = (TextView) itemView.findViewById(R.id.songDuration);
expandChild = (ImageButton) itemView.findViewById(R.id.expandCollapseBtn);
playNow = (Button) itemView.findViewById(R.id.playNowBtn);
playNext = (Button) itemView.findViewById(R.id.playNextBtn);
addToQueue = (Button) itemView.findViewById(R.id.addToQueueBtn);
addToPlayList = (Button) itemView.findViewById(R.id.addToPlaylistBtn);
editMetadata = (Button) itemView.findViewById(R.id.editMetaDataBtn);
delete = (Button) itemView.findViewById(R.id.deleteBtn);
horizontal_scroll = (HorizontalScrollView) itemView.findViewById(R.id.childSection);
expandChild.setOnClickListener(this);
}
@Override
public void onClick(View view) {
horizontal_scroll.setVisibility(View.VISIBLE);
}
}
und wenn Sie sehen möchten, finden Sie meine Adapterklasse:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by anunay on 7/11/2016.
*/
public class SongsAdapter extends RecyclerView.Adapter<SongsViewHolder> {
// private ArrayList<Song> mSongsArrayList;
private final List<Song> mSongsArrayList;
private Context mContext;
public SongsAdapter(Context context, ArrayList<Song> songsArrayList) {
mSongsArrayList = songsArrayList;
mContext = context;
}
private Context getContext() {
return mContext;
}
@Override
public SongsViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View songsView = inflater.inflate(R.layout.songs_item, parent, false);
SongsViewHolder songsViewHolder = new SongsViewHolder(songsView);
return songsViewHolder;
}
@Override
public void onBindViewHolder(final SongsViewHolder holder, int position) {
Song currSong = mSongsArrayList.get(position);
TextView songNameText = holder.songName;
songNameText.setText(currSong.getTitle());
TextView artistNameText = holder.artistName;
artistNameText.setText(currSong.getArtist());
TextView songDurationText = holder.songDuration;
songDurationText.setText(currSong.getDurationString());
}
@Override
public int getItemCount() {
return mSongsArrayList.size();
}
}
wenn ich einen Toast in Onclick Verfahren bereitzustellen, Mit der Position, anstatt die Recycleransicht zu erweitern, funktioniert es perfekt, es wird weder zufällig noch in regelmäßigen Abständen erzeugt.
expandChild.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// horizontal_scroll.setVisibility(View.VISIBLE);
Toast.makeText(view.getContext(), "clicked at position : "+getAdapterPosition(), Toast.LENGTH_SHORT).show();
}
});
beide Methoden sind die gleichen nichts ändert sich, ob ich expandChild.setOnClickListener (this) oder itemView.setOnClickListener (new View.OnClickListener() { @Override public void onClick (View v) { // beliebiger Code hier } }); Ich habe diese Methode auch versucht. – Anunay