繁体   English   中英

长按选择回收站查看项目

[英]select recyclerview items with long click

我知道有很多话题都在谈论这个话题,但我没有看到他们正确地谈论它。 我有一个 recyclerview,当用户点击它时播放曲目。 我想实现一个功能,长按,选择操作代替播放操作,甚至在项目的侧面出现复选框。

这种实现几乎存在于每个应用程序中,而且看起来很容易实现。 但在其他主题中,他们只讨论如何选择和取消选择项目,问题是,那部分很容易。 但是,当长按一个带有选择操作的项目时,您实际上如何替换现有操作?

我的适配器:

private Context context;
private ArrayList<MusicSample> collection;
private Uri playing;
private Uri chosen;
private OnMusicChange mListener;

public MusicAdapter(Context context, ArrayList<MusicSample> collection, OnMusicChange mListener){
    this.context = context;
    this.collection = collection;
    this.mListener = mListener;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.rv_song_item,parent,false);
    final ViewHolder viewHolder = new ViewHolder(view);
    viewHolder.relativeLayout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            MusicSample currentMusic = collection.get(viewHolder.getAdapterPosition());
            chosen = currentMusic.getLocation();
            mListener.enable(true);
            MusicController.Controller(context,mListener,currentMusic,collection);
        }
    });
    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
            holder.title.setText(collection.get(position).getTitle());
            holder.singer.setText(collection.get(position).getSinger());
            holder.coverArt.setImageBitmap(collection.get(position).getCoverArt());
}

@Override
public int getItemCount() {
    return collection.size();
}

public class ViewHolder extends RecyclerView.ViewHolder{

    public ImageView coverArt;
    public TextView title;
    public TextView singer;
    public RelativeLayout relativeLayout;

    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        coverArt = itemView.findViewById(R.id.cover_art);
        title = itemView.findViewById(R.id.tv_title);
        singer = itemView.findViewById(R.id.tv_singer);
        relativeLayout = itemView.findViewById(R.id.rv_layout);
    }

}

你可以用这个

  holder.relativeLayout.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            //WRITE YOUR CODE HERE
            Toast.makeText(MainActivity.this, "LONG CLICK", Toast.LENGTH_SHORT).show();
            return true;
        }
    });  

在您的onBindViewHolder方法中使用它并删除以下代码表单onCreateViewHolder并尝试

   viewHolder.relativeLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MusicSample currentMusic = collection.get(viewHolder.getAdapterPosition());
        chosen = currentMusic.getLocation();
        mListener.enable(true);
        MusicController.Controller(context,mListener,currentMusic,collection);
    }
});

您可以将代码添加到您的适配器:

 holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        Toast.makeText(MainActivity.this, "click item", Toast.LENGTH_SHORT).show();
        return true;
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM