我是一个初学者,我正在尝试构建一个简单的语音记录器应用程序。我已经在网站上发布了有关外部存储访问的信息。现在,此问题已解决,但我的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));
}

10-06 02:02