2015-03-15 4 views
0

У меня есть некоторые адаптеры в интерфейсе SeperatedListAdapter. При попытке изменить данные для адаптера я столкнулся с IllegalStateException. Сообщение выглядит следующим образом:Обновление набора данных адаптера из другого адаптера

Содержимое адаптера изменилось, но ListView не получил уведомление . Убедитесь, что содержимое вашего адаптера не изменено из фонового потока, но только из потока пользовательского интерфейса. Убедитесь, что ваш адаптер вызывает notifyDataSetChanged() при изменении его содержимого. [В ListView (16908298, класс android.widget.ListView) с адаптером (класс com.mytest.ListTest.Adapter.SeparatedListAdapter)]

я был под впечатлением, что метод notifyDataSetChanged применяется только к адаптерам, что изменили свой набор данных, поэтому я не уверен, почему исключение ссылается на SeperatedListAdapter. Ниже мой текущий код:

ListFragment:

public class FragmentOne extends ListFragment { 
    @Override 
    public void onCreate(Bundle saveInstanceState) { 
     super.onCreate(saveInstanceState); 
     SeparatedListAdapter sepList = new SeparatedListAdapter(getActivity()); 
     sepList.addSection("List One", new CustomAdapter(getActivity())); 
     setListAdapter(sepList); 
    } 
} 

CustomAdapter:

public class CustomAdapter extends BaseAdapter { 

    private final List<String> data; 

    public CustomControllerAdapter(Context context) { 
     this.context = context; 
     data = new ArrayList<String>(((MainActivity) context).getList()); 
    }  

    public void removeFromList(String name) { 
     data.remove(name); 
     notifyDataSetChanged(); 
    } 

    public void addToList(String name) { 
     data.add(name); 
     notifyDataSetChanged(); 
    }  
} 

Может кто-нибудь объяснить, что я не хватает?

EDIT: после некоторого тестирования я обнаружил, что если я приостанавливаю и возобновляю действие, список действительно обновляется. Тем не менее, я все еще не уверен, что мне нужно сделать, чтобы обновить его, пока работает.

ответ

0

Наконец-то я понял, в чем проблема. В моей ситуации я хотел добавить дополнительный TextView к моему адаптеру, не добавляя его в список, поэтому я добавил нужную сумму в существующий список. Когда вызывается notifyDataSetChanged, элемент, указанный в элементе, удаляется из списка, однако размер счета вызывает исключения типа Casting. С тех пор я удалил это, и все работает так, как ожидалось.

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