2012-03-27 3 views
2

Я пытаюсь создать интерактивный ListView без расширения класса ListActivity.Материал должен быть RatingBar слева и меткой справа. Это код, который я до сих пор, что не имеет никаких ошибок компиляции, но происходит сбой при запуске приложения:Интерактивный 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

Не могли бы вы разместить журнал ошибок? С уважением. – Manitoba

+0

Ответ на этот вопрос позаботился об этом. –

ответ

3

Переместить строку:

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

в методе onCreate() после установки вид содержимого.

+0

Вот и все. Небрежная ошибка. Благодарю. –

Смежные вопросы