Android 通过长时间单击选择recyclerview项
我知道有很多话题都在谈论这个话题,但我看不出他们谈论得很恰当。我有一个recyclerview,当用户点击它时,它会播放曲目。我想实现一个功能,通过长时间单击,选择操作将取代播放操作,甚至在项目的一侧显示复选框 这种实现几乎存在于每个应用程序中,而且似乎很容易实现。但在其他主题中,他们只讨论如何选择和取消选择项目,问题是,这一部分很容易。 但是,当长时间单击一个项目时,如何用选择操作替换现有操作呢 我的适配器:Android 通过长时间单击选择recyclerview项,android,android-recyclerview,Android,Android Recyclerview,我知道有很多话题都在谈论这个话题,但我看不出他们谈论得很恰当。我有一个recyclerview,当用户点击它时,它会播放曲目。我想实现一个功能,通过长时间单击,选择操作将取代播放操作,甚至在项目的一侧显示复选框 这种实现几乎存在于每个应用程序中,而且似乎很容易实现。但在其他主题中,他们只讨论如何选择和取消选择项目,问题是,这一部分很容易。 但是,当长时间单击一个项目时,如何用选择操作替换现有操作呢 我的适配器: private Context context; private ArrayList
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);
}
}
私有上下文;
私人收藏;
私人Uri播放;
选择私有Uri;
私人音乐更改管理员;
公共音乐播放器(上下文、ArrayList集合、OnMusicChange mListener){
this.context=上下文;
this.collection=collection;
this.mListener=mListener;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
LayoutInflater LayoutInflater=(LayoutInflater)context.getSystemService(context.LAYOUT\u INFLATER\u SERVICE);
视图=布局更平坦。充气(R.layout.rv\u song\u项目,父项,false);
最终视窗夹持器视窗夹持器=新视窗夹持器(视图);
viewHolder.relativeLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
MusicSample currentMusic=collection.get(viewHolder.getAdapterPosition());
selected=currentMusic.getLocation();
mListener.enable(true);
控制器(上下文、mListener、当前音乐、收藏);
}
});
返回视图持有者;
}
@凌驾
public void onBindViewHolder(@NonNull final ViewHolder,final int position){
holder.title.setText(collection.get(position.getTitle());
holder.singer.setText(collection.get(position.getSinger());
setImageBitmap(collection.get(position.getCoverArt());
}
@凌驾
public int getItemCount(){
返回collection.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共图像视图覆盖件;
公共文本视图标题;
公共文本视图歌手;
公共关系;
公共视图持有者(@NonNull View itemView){
超级(项目视图);
coverArt=itemView.findviewbyd(R.id.cover\u art);
title=itemView.findviewbyd(R.id.tv\u title);
singer=itemView.findViewById(R.id.tv\u singer);
relativeLayout=itemView.findViewById(R.id.rv_布局);
}
}
您可以使用此
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;
}
});
它是如何取代主功能的?我在我的应用程序中没有收到你的问题,比如说,默认情况下,当你点击这个项目时,它会播放一首歌。我的问题是,当用户持有一个项目时,如何用选择替换播放功能。您可以共享RecyclerView适配器类吗?我已经编辑了一次代码检查,这可能对你有用。嘿@Paya,请用你的代码解释你的查询code@piyushpk我将添加我的代码,但这与我无关。我添加的代码表示,每当单击某个项目时,就会开始播放曲目。这就是我在onCreateViewHolder上写的。但是当项目长时间单击时,它应该会更改,对吗?我更新了我的问题。我认为由于MediaController/MusicController,您无法访问预定义的设置OnLongClickListener,因此您必须实现“View.OnLongClickListener”在MusicController中手动管理ViewHolder.relativeLayout.setOnLongClickListner,否则代码将保持不变,并在onBindViewHolder方法中实现。