2012-03-27 40 views
2

我正在嘗試創建交互式ListView而不擴展ListActivity類。佈局應該是左側的RatingBar,右側是標籤。這是我到目前爲止的代碼,它沒有任何編譯錯誤,但崩潰的應用程序的啓動:Interactive 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 2012-03-27 20:54:23

+0

下面的答案照顧它。 – 2012-03-27 21:41:53

回答

3

招行:

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

onCreate()方法設置後內容視圖。

+0

就是這樣。粗心的錯誤。謝謝。 – 2012-03-27 21:40:36