在Recycler View中一次展开1 Text View,并在单击其他时折叠展开的文本视图

时间:2018-02-09 07:00:19

标签: android

我正在尝试扩展和折叠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个文本视图。 提前谢谢。

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());
}