Android RecyclerView-在onBindViewHolder中设置ClickableSpan侦听器是否正确?

Android RecyclerView-在onBindViewHolder中设置ClickableSpan侦听器是否正确?,android,android-recyclerview,clickablespan,Android,Android Recyclerview,Clickablespan,在RecyclerView的onBindViewHolder中设置ClickableSpan侦听器是否正确?对于viewHolder,我将在viewHolder内部实现View.OnClickListener public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { @Override public ViewHolder(@NonNull View itemView) {

在RecyclerView的onBindViewHolder中设置ClickableSpan侦听器是否正确?对于viewHolder,我将在viewHolder内部实现View.OnClickListener

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

@Override
public ViewHolder(@NonNull View itemView) {
   super(itemView);
   //set viewHolders
}

@Override
    public void onClick(View view) {
        //Set on click listener
    }
}
然而,ClickableSpan是一个类。但我不确定每次在onBindViewHolder中重新创建一个新的可点击范围是否是正确的方法

 @Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
    //holder.viewHolderUsername.setText(list.get(position).getPosted_by_user());
    holder.viewHolderMessage.setText(list.get(position).getMessage());

    SpannableString ss = new SpannableString(list.get(position).getPosted_by_user());

    String word = list.get(holder.getAdapterPosition()).getPosted_by_user();
    final int startingPosition = word.indexOf(word);
    final int endingPosition = startingPosition + word.length();

    ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void onClick(@NonNull View view) {
            Toast.makeText(mContext, list.get(holder.getAdapterPosition()).getMessage(), Toast.LENGTH_SHORT).show();

        }
    };


    ss.setSpan(clickableSpan, startingPosition, endingPosition, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    holder.viewHolderUsername.setText(ss);
    holder.viewHolderUsername.setMovementMethod(LinkMovementMethod.getInstance());

    }

好吧,因为您的点击事件源是动态的,即只有在绑定期间才知道的某个动态文本的单个单词,所以我不知道您还可以如何实现这一点。如果这与您有任何关系,您可能会通过将文本单词格式化为可点击来“伪造”它,但在单击整个
viewHolderUsername
小部件时会做出反应。因为您的点击事件源是动态的,即只有在绑定期间才知道的某个动态文本的单个单词,我看不出你还有什么别的办法能做到这一点。如果这与您有任何关系,您可能会通过将文本单词格式化为可点击来“伪造”它,但在单击整个
viewHolderUsername
小部件时会做出反应。