Android. обновить ExpandableListView - PullRequest
1 голос
/ 04 мая 2010

У меня есть следующая проблема:

Я бы хотел изменить значение ячейки ExpandableListView при клике. Как мне это сделать?

Вот что я использую:

    public class TemplateActivity extends ExpandableListActivity {

     private SimpleExpandableListAdapter expListAdapter = null;

     protected void onCreate(Bundle savedInstanceState) {
  setContentView(R.layout.template_create);
     expListAdapter = new SimpleExpandableListAdapter(
    this, createGroupList(), 
    R.layout.template_create_group_row, 
    new String[] { KEY_GROUP }, 
    new int[] { R.id.create_template_groupname }, 
    createChildList(), 
    R.layout.flower_template_create_child_row, 
    new String[] { KEY_ATTRIBUTE_VALUE }, 
    new int[] { R.id.flowerx_text_attr }
  );

  setListAdapter(expListAdapter);

     }

 private List<HashMap<String, String>> createGroupList() {
  ArrayList<HashMap<String, String>> result = new ArrayList<HashMap<String, String>>();

  for (String entryKey: <ArrayOfGroupTitles>) {
   HashMap<String, String> m = new HashMap<String, String>();
   m.put(KEY_GROUP, entryKey);
   result.add(m);
  }

  return result;
 }

 private List<ArrayList<HashMap<String, Object>>> createChildList() {
  ArrayList<ArrayList<HashMap<String, Object>>> result = new ArrayList<ArrayList<HashMap<String, Object>>>();
  for (String entryKey: fieldsInList.keySet()) {
   ArrayList<HashMap<String, Object>> secList = new ArrayList<HashMap<String, Object>>();

   HashMap<String, Object> attrVal = new HashMap<String, Object>();
   attrVal.put(KEY_ATTRIBUTE_VALUE, String.valueOf(fieldsInList.get(entryKey).getFieldValue()));
   secList.add(attrVal);
   result.add(secList);
  }

  return result;
 }

Приложение находится в стадии разработки, поэтому attrVal будет содержать несколько атрибутов (которые могут быть заданы или не зависеть от некоторой логики), поэтому я использую этот тип адаптера и способ заполнения данных ячеек.

fieldsInList - внешняя переменная типа LinkedHashMap.

У меня есть функция, которая может изменить одну из переменных член fieldsInList. Как я должен уведомить мой expListAdapter или ExpanableListView об обновлении?

Ответы [ 2 ]

0 голосов
/ 04 мая 2010

Для обновления ячеек для расширяемого списка необходимо использовать переменную List<ArrayList<HashMap<Object, Object>>> при создании адаптера. Это не работает для меня в первый раз, потому что я использую внутренний метод, который создал новый список. Может быть, этот факт является причиной проблемы. Как сказал Алекс, вам нужно вызвать adapter.notifyDataSetChanged (), чтобы внести изменения, примененные к ExpandableList. Спасибо

0 голосов
/ 04 мая 2010

expListAdapter.notifyDataSetChanged (); - уведомить адаптер об изменении данных:

Для onclick:

OnChildClickListener myOnChildClick = new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView arg0, View arg1, int arg2, int arg3,
                long arg4) {
            // TODO Auto-generated method stub
            return false;
        }

    };

и setOnChildClickListener (myOnChildClick); в onCreate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...