Изменить параметр в пользовательском адаптере - PullRequest
0 голосов
/ 17 ноября 2011

У меня есть ListView с пользовательским CursorAdapter. Между параметром 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 () я проверяю, была ли тема изменена, в этом случае фактически повторяю приведенный выше код, создавая новый MyCustomAdapter.

Мой вопрос: могу ли я использовать существующий адаптер, изменив один параметр и обновив его? Например, при смене курсора я использую

mAdapter.swapCursor(cursor);

1 Ответ

1 голос
/ 17 ноября 2011

Установите вашу тему в getView() из Adapter, тогда вы можете позвонить

adapter.notifyDataSetChanged();

в onResume() из Activity, но убедитесь, что вы установили свою тему так, как вы устанавливаете представлениеданные для отдельной строки.

например:

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().

...