にOnClickListener
を実装します。何かをタップするたびに、OnClickイベントは発生しますが、複数のアイテムで発生します。それは私がタップしたアイテムのために解雇されるべきです。また、RecyclerView
のランダムな行でも発生します。たとえば、RecyclerView
の最初の行をクリックすると、OnClickイベントがランダムポジションで発生します。たとえば、7th、15th、28th ... 112thより多くのイベントが発生します。私はそれがリサイクルされると思うので、これが起こります。RecyclerViewのOnClickListenerが正しく機能していません
最初はランダムな位置で解雇されていませんでした。たとえば、第1の位置をクリックすると第1の位置で、また第12,21,31から12番目の位置でクリックされた場合、それは周期的でしたが、今はランダムです。
私のような多くの方法を試してみました:
http://www.littlerobots.nl/blog/Handle-Android-RecyclerView-Clicks/
https://stackoverflow.com/a/24746411/4754718
私はそれのために10以上の評判を必要とするので、私は申し訳ありませんが、リンクを提供カントも多くの他の方法を試してみましたが、申し訳ありませんしています。続き
は私のviewholderクラスです:
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);
}
}
、あなたが見たい場合は、次のように私のアダプタクラスである:私はonclickの方法で乾杯を提供する場合
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();
}
}
位置はリサイクルビューを展開する代わりに完全に動作し、ランダムポジションでも定期的にも生成されません。
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();
}
});
どちらのメソッドも、expandChild.setOnClickListener(this)またはitemView.setOnClickListener(new View)のどちらを使用しても同じ変更はありません。OnClickListener(){ @Override public void onClick(vを表示){ //ここに任意のコード } });私もこの方法を試みました。 – Anunay