2017-03-08 9 views
1

リサイクラービューがあり、テキストビューテキストの一部の色を変更したいと思います。これは、色や文字サイズを変更しないAndroid Spannableがリサイクラービューアダプターで機能しない

public class MyAdapter extends RecyclerView.Adapter<MyEarningsAdapter.ViewHolder> { 
    public ArrayList<WageItemDataSet> wageItemList; 
    private Context context; 
    private Spannable spanText; 
    private ForegroundColorSpan fcs; 
    private RelativeSizeSpan rss; 
    public MyAdapter(Context context) { 
     wageItemList = new ArrayList<>(); 
     this.context = context; 
     fcs = new ForegroundColorSpan(Color.BLACK); 
     rss = new RelativeSizeSpan(0.8f); 
    } 
@Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item_wage_list, parent, false)); 
    } 
    @Override 
     public void onBindViewHolder(ViewHolder holder, int position) { 
      WageItemDataSet item = wageItemList.get(position); 
      spanText = new SpannableString("Fare: "+item.totalFare); 
      spanText.setSpan(fcs, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      spanText.setSpan(rss, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
      holder.tvFareAmount.setText(spanText); 

     } 

     public class ViewHolder extends RecyclerView.ViewHolder { 
      TextView tvFareAmount; 
      public ViewHolder(View itemView) { 
       super(itemView); 
       tvFareAmount = (TextView) itemView.findViewById(R.id.tvFareAmount); 

       tvFareAmount.setTypeface(openSansRegular); 

      } 
     } 
} 

は、ここに私のコードです。私は何を間違えているのですか?

答えて

0

こんにちは、私は私のために同じことをしてその作業を実施しています。私はこれが解決を願っています

 SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append("yourstring"); 
    builder.setSpan(new TextSpan(), builder.length() -   
    comment.length(),builder.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    holder.tvFareAmount.setText(content); 
    holder.tvFareAmount.setMovementMethod(LinkMovementMethod.getInstance()); 

以下のようにこのコードを記述する必要があり、あなたのonBindViewHolder上の()メソッドで

public class TextSpan extends ClickableSpan { 
     @Override 
     public void onClick(View widget) { 
     TextView tv = (TextView) widget; 
     Spanned s = (Spanned) tv.getText(); 
     //int start = s.getSpanStart(this); 
     //int end = s.getSpanEnd(this); 
    } 
    } 

、その後:あなたは以下のようにそれのようにClickableSpanを拡張する1つのクラスを作成する必要がありますあなたの問題

+0

@ WOLF.Lそれは役に立ちます –

+0

はいそれは働いています。ありがとう@サンドイプ –

0

これは私のために働いた

WageItemDataSet item = wageItemList.get(position); 
    String value="Fare: "+item.totalFare; 
    Spannable spanText = new SpannableString(value);   
    spanText.setSpan(new ForegroundColorSpan(Color.BLUE), 5, 13, 
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    textview.setText(spanText); 
+0

ありがとうございますが動作しません –

0

、これを試してみてください -

StringBuilder captionBuilder = new StringBuilder(); 
captionBuilder.append(yourString); 
SpannableStringBuilder commentBuilder = new SpannableStringBuilder(captionBuilder); 
commentBuilder.setSpan(new ForegroundColorSpan(ContextCompat.getColor(mContext, R.color.your_color)), start, end, 0); 

はそれがお役に立てば幸いです。

+0

私はSpannable、SpannableString、SpannableStringBuilderを試しました。何も動作しません –

+0

申し訳ありませんが、私は 'StringBuilder'で動作させました。それは私のアプリで働いています。やってみなよ。 – Wizard

0

代わり.settextのあなたの目標を達成するために、以下の使用...

public static void spanText(Context context, AppCompatAutoCompleteTextView editText, String replaceString) { 
    String event = editText.getHint().toString(); 
    int startPos = event.indexOf(replaceString); 
    int endPos = startPos + replaceString.length(); 

    Spannable spanText = Spannable.Factory.getInstance().newSpannable(editText.getHint()); 
    spanText.setSpan(new ForegroundColorSpan(ContextCompat.getColor(context, R.color.dark_yellow)), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    editText.setHint(spanText); 
} 
+0

ありがとう、しかし働いていない –

0

するTry .append()()

holder.tvFareAmount.append(spanText) 
関連する問題