2013-10-08 15 views
5

多くのテキストを表示できるListViewがあります。一部のテキストは、BOLDのように書式設定されています。それらのテキストを太字にするために、Spannableを使用しています。しかし、私はそれを上下にスクロールすると、インデックス[0]は複数回になります。文字列配列を太字に設定する

シーンを避けるために、私はTextViewを保持するためにホルダーを使用しました。私はスクロールでその問題を解決することができたが、何らかの理由で、BOLDであるTextstyleがListViewに残った。どうやってやるの?

MainActivity.java

private void populateListView() { 

String[] source = { "Lorem ipsum dolor sit amet", "consectetuer adipiscing elit", 
        "sed diam nonummy nibh " }; 

final SpannableString out0 = new SpannableString(source[0]); 
final SpannableString out2 = new SpannableString(source[2]); 

StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); 

out0.setSpan(boldSpan, 6, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
out2.setSpan(boldSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      R.layout.items, // Layout to use (create) 
      source) { // Items to be displayed 

     public View getView(int position, View convertView, ViewGroup parent) { 
      View v = super.getView(position, convertView, parent); 

      try { 

       viewHolder.tv = (TextView) lv_procedures.getChildAt(0) 
         .findViewById(R.id.lbl_item); 
       viewHolder.tv_2 = (TextView) lv_procedures.getChildAt(2) 
         .findViewById(R.id.lbl_item); 

       viewHolder.tv.setText(out0); 
       viewHolder.tv_2.setText(out2); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return v; 
     } 
    }; 


} 

クラスViewHolder

private class ViewHolder { 
    TextView tv; 
    TextView tv_2; 
} 
+0

リスト項目のためのあなたのxmlを投稿 – Triode

答えて

15
// try this 
class CustomAdapter extends ArrayAdapter<String>{ 
     private Context context; 
     private String[] source; 
     public CustomAdapter(Context context, String[] source) { 
      super(context,R.layout.items,source); 
      this.context = context; 
      this.source = source; 
     } 

     @Override 
     public int getCount() { 
      return source.length; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      ViewHolder holder; 
      if(convertView==null){ 
       convertView = LayoutInflater.from(context).inflate(R.layout.items,null); 
       holder = new ViewHolder(); 
       holder.tv = (TextView) convertView.findViewById(R.id.lbl_item); 
       convertView.setTag(holder); 
      }else{ 
       holder = (ViewHolder)convertView.getTag(); 
      } 

      if(position==0){ 
       final SpannableString out0 = new SpannableString(source[position]); 
       StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); 
       out0.setSpan(boldSpan, 6, 17, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       holder.tv.setText(out0); 

      }else if(position==2){ 
       final SpannableString out2 = new SpannableString(source[position]); 
       StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); 
       out2.setSpan(boldSpan, 0, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       holder.tv.setText(out2); 
      }else{ 
       holder.tv.setText(source[position]); 
      } 


      convertView.setTag(holder); 
      return convertView; 
     } 

     private class ViewHolder { 
      TextView tv; 
     } 
    }