2011-11-17 58 views
0

我有一個帶有自定義CursorAdapter的ListView。在CursorAdapter的參數之間有主題,CursorAdapter從傳遞的主題設置顏色。更改自定義適配器中的參數

private MyCustomAdapter mAdapter; 

public void onCreate(Bundle savedInstanceState) { 
    ListView lv = (ListView)findViewById(R.id.myList); 
    mAdapter = new MyCustomAdapter(
     this, 
     R.layout.my_list_row, 
     null, // cursor set later by cursorloader 
     mTheme); //int selected theme 
    lv.setAdapter(mAdapter); 
} 

用戶可以從喜好改變主題,在的onResume()我檢查,如果主題已經改變,在這種情況下,其實我repete上面的代碼,創建一個新的MyCustomAdapter。

我的問題是:我可以使用現有的適配器更改一個參數並更新它嗎?例如,當光標改變我用

mAdapter.swapCursor(cursor); 
+0

無法找到CursorAdapter(http://developer.android.com/reference/android/widget/CursorAdapter.html)處理顏色/樣式的方法或構造函數。 你如何將主題傳遞給遊標適配器? – HighFlyer

+0

我爲適配器編寫了一個自定義構造函數來傳遞用於應用特定主題的int值。 – crbin1

回答

1

設置你的主題在你的AdaptergetView(), 那麼你可以撥打

adapter.notifyDataSetChanged(); 
Activity onResume()

但要確保你設置你的主題結合的方式您爲單個行設置視圖數據。

例如:

public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder = null; 
     if (convertView == null) { 
      convertView = mInflater.inflate(R.layout.item1, null); 
      holder = new ViewHolder(); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder)convertView.getTag(); 
     } 
     // your data for row implementation goes here 
     // and also your theme implementation goes here 
     // maybe some Method to set Theme 
     if(savedTheme == Constants.RED) 
      Utils.setTheme(convertView, Constants.RED); 
     else 
      //Your other themes 
     return convertView; 
} 

setTheme()可能在你Utils類的靜態方法,該方法設置的行的文本顏色或背景。或者您也可以在getView()內設置主題。