RecyclerView项目单击单击项目内部的TextView

时间:2019-07-23 21:16:59

标签: android android-recyclerview textview

我的RecyclerView项中有一个TextView,我使用下面的适配器中的代码使TextView中的链接可单击:

public void bindNote(Note note) {
    str = note.getNoteText();
    strHTML = str.replaceAll("\n","<br>");
    noteTextView.setText(Html.fromHtml(strHTML));
    noteTextView.setMovementMethod(LinkMovementMethod.getInstance()); 
} 

问题是执行此操作之后,现在单击该项目将无法正常工作,并且仅当我在TextView之外单击时才单击该项目。如果我单击文本,则什么也不会发生。

是因为我使链接可点击而引起的问题吗?还是我没有正确处理点击?

这是ViewHolder的一部分:

public class NoteViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
        View.OnLongClickListener, PopupMenu.OnMenuItemClickListener {
    TextView noteTextView;
    TextView dateTextView;

    public NoteViewHolder(@NonNull View itemView) {
        super(itemView);
        noteTextView = itemView.findViewById(R.id.tv_itemNoteTele_noteText);
        dateTextView = itemView.findViewById(R.id.tv_itemNoteTele_date);

        itemView.setOnLongClickListener(this);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        onClickListener.itemClick(v, getAdapterPosition());
    }
}

public interface AdapterClickListener {
    void itemClick(View itemView, int position);
}

1 个答案:

答案 0 :(得分:0)

对我来说,您商品的行为似乎是正常且合乎逻辑的。当您单击文本视图时,它会像您配置的那样充当超链接。

如果您希望通过单击文本来执行保存操作而不是该项目,建议您为该项目的文本视图调用相同的View.OnClickListener

public class NoteViewHolder extends RecyclerView.ViewHolder implements 
View.OnClickListener, View.OnLongClickListener, PopupMenu.OnMenuItemClickListener {

TextView noteTextView;
TextView dateTextView;

public NoteViewHolder(@NonNull View itemView) {
    super(itemView);
    noteTextView = itemView.findViewById(R.id.tv_itemNoteTele_noteText);
    dateTextView = itemView.findViewById(R.id.tv_itemNoteTele_date);

    itemView.setOnLongClickListener(this);
    itemView.setOnClickListener(this);
    noteTextView.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    onClickListener.itemClick(v, getAdapterPosition());
  }
}

public interface AdapterClickListener {
void itemClick(View itemView, int position);
}