2013-10-08 13 views
5

Ich habe eine ListView, wo ich es geschafft, viele Texte darauf anzuzeigen. Einige der Texte sind als BOLD formatiert. Um diese Texte fett zu machen, habe ich Spannable benutzt und es funktioniert! Wenn ich es aber wieder runter und wieder hoch scrollte, wird der Index [0] multipliziert.Setzen Sie ein String-Array in Android Fett

Um diese Szene zu vermeiden, habe ich einen Halter verwendet, um meine TextViews zu halten. Ich habe es geschafft, dieses Problem beim Scrollen zu lösen, aber aus einigen Gründen ist der Texttyp, der fett ist, in meinem ListView verschwunden. Wie kann ich das machen?

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


} 

Klasse ViewHolder

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

posten Sie Ihre xml für das Listenelement – Triode

Antwort

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