我是一个初学者,我正在尝试构建一个简单的语音记录器应用程序。我已经在网站上发布了有关外部存储访问的信息。现在,此问题已解决,但我的RecyclerView还有另一个问题。
我已在线上阅读了教程,以检测单击了哪个视图并相应地播放音频(我使用RecyclerView来显示刚刚创建的所有录音文件)。这是有问题的教程:https://www.youtube.com/watch?v=ZXoGG2XTjzU
问题是,“ OnNoteClick”绝对不起作用。我怎样才能解决这个问题 ?
我创建了一个接口,并附加了功能“ OnNoteClick”。我在mainactivity.java中实现了此功能。基本上,我遵循了该教程。
\\\ Adapter Code
private OnNoteListener mOnNoteListener;
...
public RecyclerViewAdapter(@NonNull ArrayList<String> text, Context context, OnNoteListener onNoteListener) {
Text = text;
this.context = context;
this.mOnNoteListener = onNoteListener;
}
...
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
ViewHolder holder = new ViewHolder(view, mOnNoteListener);
return holder;
}
...
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textView;
CardView ParentLayout;
OnNoteListener onNoteListener;
public ViewHolder(@NonNull View itemView, OnNoteListener onNoteListener) {
super(itemView);
textView = itemView.findViewById(R.id.cardtext);
ParentLayout = itemView.findViewById(R.id.cardview);
this.onNoteListener = onNoteListener;
ParentLayout.setOnClickListener(this);
}
@Override
public void onClick(View v) {
onNoteListener.onNoteClick(getAdapterPosition());
}
}
public interface OnNoteListener{
void onNoteClick(int position);
}
}
...
\\\ MainActivityCode
public class FileAndDirectoryActivity extends AppCompatActivity implements RecyclerViewAdapter.OnNoteListener {
...
private void initRecyclerView() {
RecyclerView recyclerView = findViewById(R.id.recyclerview);
RecyclerViewAdapter adapter = new RecyclerViewAdapter(mNames, this, this);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
}
...
@Override
public void onNoteClick(int position) {
Toast.makeText(this, "Good News : I'm working", Toast.LENGTH_SHORT).show();
}
}
...
我希望该应用程序显示一条显示“我正在工作”或类似内容的消息,但实际上,当我触摸Cardview时,什么也没发生。
最佳答案
您的问题出在:
public void onBindViewHolder(@NonNull ViewHolder holder, int i) {
holder.textView.setText(Text.get(i));
holder.ParentLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG, "onClick: Click on this card !");
}
});
}
您在
ParentLayout
上设置了新的Click侦听器,因此它将覆盖您在构造函数中设置的Click侦听器。不尝试它,它应该可以工作:public void onBindViewHolder(@NonNull ViewHolder holder, int i) {
holder.textView.setText(Text.get(i));
}