【问题标题】:Perform StringBuilder setText method and ExpendableTextView setText method with the same holder同一个holder执行StringBuilder setText方法和ExpendableTextView setText方法
【发布时间】:2014-10-14 10:44:47
【问题描述】:

根据这篇文章给出的答案,

Android - Expandable TextView with Animation

我希望能够使用我的功能 `

         holder.expandableTextView.setText(wallContent);

            SpannableStringBuilder ssb = SharefolioSpannableHandler.getSpannableStringBuilder(context, wallContent, currentWall.personTagged, currentWall.companyTagged);
            holder.expandableTextView.setMovementMethod(LinkMovementMethod.getInstance());
            holder.expandableTextView.setText(ssb);

`

这是 SharefolioSpannableHandler 类 `

public class SharefolioSpannableHandler {

    public static SpannableStringBuilder getSpannableStringBuilder(final Context context, String text, List<Account> persons, List<Company> companies) {
        SpannableStringBuilder ssb = new SpannableStringBuilder(text);

        if (persons.size() != 0) {
            for (int i = 0; i < persons.size(); i++) {
                final Account person = persons.get(i);
                final String personName = persons.get(i).firstname;

                if (text.contains(personName)) {
                    int start = text.indexOf(personName) - 1;
                    int end = start + personName.length() + 1;
                    ssb.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    ssb.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    ssb.setSpan(new ClickableSpan() {

                        @Override
                        public void onClick(View v) {
                            // TODO Auto-generated method stub
                             Intent intent = new Intent(context, LoadUserWallActivity.class);
                             intent.putExtra(LoadUserWallActivity.TAG, person);
                             context.startActivity(intent);
                        }
                    }, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        } 

        if (companies.size() != 0) {
            for (int i = 0 ; i < companies.size() ; i++) {
                final Company company = companies.get(i);
                final String companyCode = companies.get(i).companyCode;

                if (text.contains(companyCode)) {

                    int start = text.indexOf(companyCode) - 1;
                    int end = start + companyCode.length() + 1;
                    ssb.setSpan(new StyleSpan(Typeface.BOLD), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    ssb.setSpan(new ForegroundColorSpan(Color.BLUE), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    ssb.setSpan(new ClickableSpan() {

                        @Override
                        public void onClick(View v) {
                            Intent intent = new Intent(context, CompanyActivity.class);
                            Bundle b = new Bundle();
                            b.putSerializable("company", company);
                            intent.putExtras(b);
                            context.startActivity(intent);
                        }
                    }, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        return ssb;
    }

}
`

我目前遇到了一些问题,因为持有人的ExpendableTextView 已经有一个setText,但是如何包含StringBuilder 函数给我带来了问题。如果我如上所示运行,虽然它确实创建了Expandable TextView,但它不会执行StringBuilder 在链接或标签方面应该做的事情。

有人知道如何将这两个功能结合在一起吗?

谢谢 金斯利

【问题讨论】:

    标签: android textview stringbuilder expandable


    【解决方案1】:

    我发现了我的问题。我只需要在我的 ExpendableTextView 中返回我的 StringBuilder 的输出,而不是这个

    holder.expandableTextView.setText(wallContent);
    
                SpannableStringBuilder ssb = SharefolioSpannableHandler.getSpannableStringBuilder(context, wallContent, currentWall.personTagged, currentWall.companyTagged);
                holder.expandableTextView.setMovementMethod(LinkMovementMethod.getInstance());
                holder.expandableTextView.setText(ssb);
    

    我做到了

    holder.expandableTextView.setText(wallContent);         
    holder.expandableTextView.setMovementMethod(LinkMovementMethod.getInstance());
    holder.expandableTextView.setText(SharefolioSpannableHandler.getSpannableStringBuilder(context, wallContent, currentWall.personTagged, currentWall.companyTagged));
    

    非常适合我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多