2011-05-06 81 views
0

我有一個ListView與一些元素,我想改變行的背景取決於他們在數據庫中的類型。我得到的是一個SimpleCursorAdapter實例,它的功能是adapter.setViewBinder(...)。但看起來,我無法訪問連續的LinearLayout。下面的代碼:我可以從ViewBinder中的ListView行更改LinearLayout的背景嗎?

final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.day, c, new String[] { "name_con", "start", "end", 
        "type", "prof", "room" }, new int[] { R.id.subjectName, 
        R.id.subjectStart, R.id.subjectEnd, R.id.subjectType, 
        R.id.subjectProf, R.id.subjectRoom }); 

    adapter.setViewBinder(new ViewBinder() { 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int column) { 
      switch (view.getId()) { 
      case R.id.subjectName: 
       final String colNameName = cursor.getString(1); 
       ((TextView) view).setText(colNameName); 

       return true; 
      case R.id.subjectStart: 
       final int colNameStart = cursor.getInt(2); 

       Date dStart = new Date(colNameStart * 1000); 
       SimpleDateFormat sdfStart = new SimpleDateFormat(
         "HH:mm", Locale.getDefault()); 
       String startString = sdfStart.format(dStart); 

       ((TextView) view).setText(startString); 

       return true; 
      case R.id.subjectEnd: 
       final int colNameEnd = cursor.getInt(3); 

       Date dEnd = new Date(colNameEnd * 1000); 
       SimpleDateFormat sdfEnd = new SimpleDateFormat(
         "HH:mm", Locale.getDefault()); 
       String EndString = sdfEnd.format(dEnd); 

       ((TextView) view).setText(EndString); 

       return true; 
      case R.id.subjectType: 
       final int colNameType = cursor.getInt(4); 

       switch(colNameType){ 
       case 0: 
        ((TextView) view).setText(R.string.practice); 
        break; 
       case 1: 
        ((TextView) view).setText(R.string.course); 
        break; 
       case 2: 
        ((TextView) view).setText(R.string.practica); 
        break; 
       case 3: 
        ((TextView) view).setText(R.string.seminar); 
       } 

       return true; 
      case R.id.subjectProf: 
       final String colNameProf = cursor.getString(5); 
       ((TextView) view).setText(colNameProf); 

       return true; 
      case R.id.subjectRoom: 
       final String colNameRoom = cursor.getString(6); 
       ((TextView) view).setText(colNameRoom); 

       return true; 
      case R.id.dayCell: 
       ((LinearLayout)view).setBackgroundColor(Color.WHITE); 
      default: 
       return false; 
      } 
     } 
    }); 

    this.setListAdapter(adapter); 

回答

0

你應該能夠做這樣的事情:

switch (view.getId()) { 
      case R.id.subjectName: 
       final String colNameName = cursor.getString(1); 
       ((TextView) view).setText(colNameName); 
       ((LinearLayout)view.getParent()).setBackgroundResource(<resource id>); 
       return true; 

編輯:爲了提高效率,你可能只想做在ViewBinder通道中的一個,和你需要確保它是一個在R.layout.day中創建的LinearLayout,否則你將最終產生ClassCast異常。

+0

完美的作品!謝謝。 – 2011-05-06 13:39:43

+0

很高興聽到它的工作。 – Femi 2011-05-06 13:42:57

0

你可以調用setBackgroundColor(INT顏色),setBackgroundResource(INT)或setBackgroundResource(INT渣油)更改您的視圖的背景。

BR, 克里斯托弗

0

覆蓋bindViewCursorAdapter

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    super.bindView(view, context, cursor); 
    view.setBackgroundColor(color); 
} 
相關問題