我正在尝试扩展和折叠RecyclerView中的文本视图,我可以轻松地执行此任务,但要求是一次扩展一个文本视图,即如果扩展RecyclerView中第一个位置的文本视图和第二个文本视图单击位置然后第一个应自动折叠。 这是扩展和崩溃的方法:
private void addReadMore(final String text, final TextView textView) {
SpannableString ss = new SpannableString(text.substring(0, 280) + "... Read More");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
addReadLess(text, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
} else {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
}
}
};
ss.setSpan(clickableSpan, ss.length() - 10, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
private void addReadLess(final String text, final TextView textView) {
SpannableString ss = new SpannableString(text + " Read Less");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View view) {
addReadMore(text, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
} else {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
}
}
};
ss.setSpan(clickableSpan, ss.length() - 10, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
请建议我如何一次只展开1个文本视图。 提前谢谢。
答案 0 :(得分:0)
您可以将扩展索引的值保存在变量中。
在展开视图的onClickListener中,您可以调用notifyDataSetChanged
。
创建一个全局变量(让它为int expandedIndex = -1
)
每次调用read more或read less函数时,请更新此变量并调用notifyDataSetChanged
。
<强>被修改强>
注意:index
是适配器中项目位置的位置。
int expandedIndex = -1;
void onBindViewHolder(){
if(length>280 && position==-1){ //for first time, call read more }
else if(length<280&&position==-1){ //Call read less) }
else { //Call read more when manual clicks are done on position }
}
private void addReadMore(final String text, final TextView textView) {
SpannableString ss = new SpannableString(text.substring(0, 280) + "... Read More");
}
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
position=-1;
notifiyDatasetChanged()
addReadLess(text, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
} else {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
}
}
};
ss.setSpan(clickableSpan, ss.length() - 10, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}
private void addReadLess(final String text, final TextView textView,int index) {
SpannableString ss = new SpannableString(text + " Read Less");
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View view) {
position=index;
notifiyDatasetChanged
addReadMore(text, textView);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setUnderlineText(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
} else {
ds.setColor(ContextCompat.getColor(mContext, R.color.txt_color));
}
}
};
ss.setSpan(clickableSpan, ss.length() - 10, ss.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(ss);
textView.setMovementMethod(LinkMovementMethod.getInstance());
}