2011-10-19 2 views
6

В моем приложении я работаю с ExpandableListView. Я использую адаптер, который расширяет BaseExpandableListAdapter. Я хочу обновить ExpandableListView.android notifyDataSetChanged для ExpandableListView не работает

Мои ExpandableListView состоит из элементов с кнопкой удаления, которая связывается с базой данных. Если я нажму кнопку удаления, элемент будет удален навсегда с db. Но listview не освежает одновременно. Если я снова запустил эту деятельность, ее освежающе, но не в одно и то же время. Я использую

mAdapter.notifyDataSetChanged(); 

, но он не работает, как я хочу. Почему?

+0

показать нам свой код адаптера? –

+0

Вы повторно спросили «Курсор» тоже ..? –

+0

как я только удалил элемент, потому что для этого курсора не требуется. Так я не использую это – Jyosna

ответ

4

вы можете попробовать дополнительно вызвать invalidateViews() на вашем ExpandableListView при обновлении.

+0

, где я его напишу? bcz я хочу, чтобы кнопка «Обновить» нажала кнопку «Обновить». – Jyosna

+0

всякий раз, когда содержимое вашего ExpandableListView было изменено. Поэтому после того, как вы удалили некоторую запись, например, – senola

+0

, но там invalidateViews() не доступно – Jyosna

8

Я только что назвал super над следующим переопределенным методом BaseExpandableListAdapter и с тех пор работает notifyDataSetChanged().

@Override 
    public void registerDataSetObserver(DataSetObserver observer) { 
     super.registerDataSetObserver(observer);  
    } 
+0

Не знаете, как ExpandableListAdapter является интерфейсом. –

+0

Я думаю, что немного поздно, но на самом деле я использовал класс: BaseExpandableListAdapter в качестве адаптера списка. – Cata

+0

Ahh OK, что было бы полезно, спасибо за обновление ответа. –

0

Вы должны ждать, пока весь viewtree не был составлен, а затем вы можете вызвать notifyDataSetChanged()

«Вид дерева наблюдателя используются для регистрации слушателей, которые могут быть уведомлены о глобальных изменениях в (например, макет всего дерева, начало прохода чертежа, изменение сенсорного режима). ViewTreeObserver никогда не должен создаваться приложениями, поскольку он обеспечивается иерархией представлений. Для получения дополнительной информации обратитесь к getViewTreeObserver(). "

http://developer.android.com/reference/android/view/ViewTreeObserver.html

final View v = convertView; 
     ViewTreeObserver vto = convertView.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      public void onGlobalLayout() { 
       v.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

       notifyDataSetChanged();  
}}); 
0

Если вы используете Выдвижной списки Big Nerd Ranch, обратите внимание, что традиционная notifyDataSetChanged() из RecyclerView.adapter не работает.

Вместо этого расширяемый RecyclerView предоставляет набор методов уведомления с возможностью информировать адаптер об изменениях в списке ParentListItems.

// Parent Changes 
notifyParentItemInserted(int parentPosition) 
notifyParentItemRemoved(int parentPosition) 
notifyParentItemChanged(int parentPosition) 
notifyParentItemRangeInserted(int parentPositionStart, int itemCount) 

// Child Changes 
notifyChildItemInserted(int parentPosition, int childPosition) 
notifyChildItemRemoved(int parentPosition, int childPosition) 
notifyChildItemChanged(int parentPosition, int childPosition) 

Для дополнительных особенностей посетить https://bignerdranch.github.io/expandable-recycler-view/

Смежные вопросы