Android 如何在Recyclerview适配器中设置链接越来越少的textview
我有一个Android 如何在Recyclerview适配器中设置链接越来越少的textview,android,textview,android-recyclerview,Android,Textview,Android Recyclerview,我有一个文本视图,用于显示链接越来越少的大文本。我的RecyclerView适配器中有这个TextView。当我启动应用程序时,它会显示正确的文本,但当我向下滚动并再次向上滚动时,有时文本消失,有时文本交换,有时不再显示 我正在使用以下代码: CreateView持有者代码: public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { return new ListI
文本视图
,用于显示链接越来越少的大文本。我的RecyclerView
适配器中有这个TextView
。当我启动应用程序时,它会显示正确的文本,但当我向下滚动并再次向上滚动时,有时文本消失,有时文本交换,有时不再显示
我正在使用以下代码:
CreateView持有者代码:
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
return new ListItemHolder(inflater.inflate(mLayoutResID, viewGroup, false));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {
mList = (dataList) this.dataList.get(position);
final ListItemHolder listItemHolder = (ListItemHolder) viewHolder;
listItemHolder.mBodyText = mList.getmBody();
makeExpandable(listItemHolder.mBodyText, listItemHolder.mBodyTextView);
}
你能发布适配器代码吗?特别是在CreateViewHolder和OnBindViewHolder上。我在问题描述中编辑了我的代码,请检查一下,如果你有任何想法,请帮助我。你的列表是什么?像ArrayList或要在适配器项目中设置的东西?我没有ArrayList,它是自定义列表,我在其中设置了列表项目的详细信息。我可以为这个问题提供任何解决方案吗。这将是一个很大的帮助。
public void makeExpandable(String descriptionText, final TextView textView) {
MORE = mContext.getResources().getString(R.string.more_content);
LESS = " " + mContext.getResources().getString(R.string.less_content);
CharSequence body = Html.fromHtml(descriptionText);
final SpannableString text = new SpannableString(body);
mTitleBodyTextView = textView;
final int maxChar = 150;
final ViewTreeObserver vto = textView.getViewTreeObserver();
textView.setTextColor(mContext.getResources().getColor(R.color.black));
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = textView.getViewTreeObserver();
obs.removeOnGlobalLayoutListener(this);
lineEndIndex = 150;
textView.setMovementMethod(LinkMovementMethod.getInstance());
showLess(text, maxChar, textView);
}
});
}
/**
* truncate text and append a clickable {@link #MORE}
*/
private void showLess(final SpannableString text, final int maxChar, final TextView textView) {
final String newText = text.subSequence(0, lineEndIndex - (ELLIPSIZE.length() +
MORE.length() + 1)).toString() + ELLIPSIZE + MORE;
SpannableStringBuilder builder = new SpannableStringBuilder(newText);
builder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
showMore(text, maxChar, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
ds.setColor(mContext.getResources().getColor(R.color.grey_dark));
}
}, newText.length() - MORE.length(), newText.length(), 0);
textView.setText(builder, TextView.BufferType.SPANNABLE);
}
/**
* show full text and append a clickable {@link #LESS}
*/
private void showMore(final SpannableString text, final int maxChar, final TextView textView) {
// create a text like subText + ELLIPSIZE + MORE
SpannableStringBuilder builder = new SpannableStringBuilder(text + LESS);
builder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
showLess(text, maxChar, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
ds.setColor(mContext.getResources().getColor(R.color.grey_dark));
}
}, builder.length() - LESS.length(), builder.length(), 0);
textView.setText(builder, TextView.BufferType.SPANNABLE);
}