2012-03-27 20 views
2

Ich versuche, eine interaktive ListView erstellen, ohne die ListActivity Klasse zu erweitern.Das Layout sollte eine RatingBar auf der linken Seite und eine Bezeichnung auf der rechten Seite sein. Dies ist der Code, den ich bisher habe, die keine Fehler kompilieren muss, sondern stürzt beim Start der App:Interaktive ListView

public class ProDroid_BAActivity extends Activity { 
    private static final String[] items = { "lorem", "ipsum", "dolor", "sit", 
     "amet", "consectetuer", "adipiscing", "elit", "morbi", "vel", 
     "ligula", "vitae", "arcu", "aliquet", "mollis", "etiam", "vel", 
     "erat", "placerat", "ante", "porttitor", "sodales", "pellentesque", 
     "augue", "purus" }; 

ListView listv = (ListView) findViewById(R.id.listView1); 
ArrayAdapter<RowModel> adapter; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    ArrayList<RowModel> list = new ArrayList<RowModel>(); 
    for (String s : items) { 
     list.add(new RowModel(s)); 
    } 

    adapter = new RatingAdapter(list); 
    listv.setAdapter(adapter); 

} 

private RowModel getModel(int position) { 
    return adapter.getItem(position); 
} 

class RatingAdapter extends ArrayAdapter<RowModel> { 

    public RatingAdapter(ArrayList<RowModel> list) { 
     super(ProDroid_BAActivity.this, R.layout.row, R.id.label, list); 

    } 

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

     ViewHolder holder = (ViewHolder) row.getTag(); 
     if (holder == null) { 
      holder = new ViewHolder(row); 
      row.setTag(holder); 

      RatingBar.OnRatingBarChangeListener l = new RatingBar.OnRatingBarChangeListener() { 
       public void onRatingChanged(RatingBar ratingBar, 
         float rating, boolean fromTouch) { 
        Integer myPosition = (Integer) ratingBar.getTag(); 
        RowModel model = getModel(myPosition); 

        model.rating = rating; 

        LinearLayout parent = (LinearLayout) ratingBar 
          .getParent(); 
        TextView label = (TextView) parent 
          .findViewById(R.id.label); 

        label.setText(model.toString()); 
       } 
      }; 

      holder.rate.setOnRatingBarChangeListener(l); 



     } 

     RowModel model = getModel(position); 

     holder.rate.setTag(new Integer(position)); 
     // holder.text.setTag(new Integer(position)); 
     holder.rate.setRating(model.rating); 
     // holder.text.setText(model.label); 

     return row; 
    } 

} 

class RowModel { 
    String label; 
    float rating = 2.0f; 

    RowModel(String label) { 
     this.label = label; 
    } 

    public String toString() { 
     if (rating >= 3.0) { 
      return (label.toUpperCase()); 
     } 

     return (label); 
    } 
} 
} 
+0

Könnten Sie bitte das Fehlerprotokoll posten? Grüße. – Manitoba

+0

Die Antwort unten kümmerte sich darum. –

Antwort

3

Bewegen Sie die Zeile:

ListView listv = (ListView) findViewById(R.id.listView1); 

im onCreate() Verfahren nach dir die Inhaltsansicht.

+0

Das war es. Flüchtigkeitsfehler. Vielen Dank. –