2013-10-08 8 views
5

Ho una ListView in cui sono riuscito a visualizzare molti testi su di essa. Alcuni dei testi sono formattati come BOLD. Per rendere quei testi audaci, ho usato Spannable e funziona! Tuttavia, quando l'ho fatto scorrere verso l'alto e verso l'alto, l'indice [0] diventa multiplo.Imposta una matrice di stringhe in grassetto su Android

Per evitare quella scena, ho utilizzato un supporto per contenere le mie TextView. Sono riuscito a risolvere questo problema nello scrolling, ma per alcuni motivi, il texttyle che è BOLD, è andato nel mio ListView. Come lo posso fare?

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


} 

Classe ViewHolder

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

inviare un vostro XML per la voce di elenco – Triode

risposta

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