Android - Как обновить мой список после добавления элемента в базу данных через фрагмент диалога

1

У меня есть DialogFragment откуда я добавляю элемент в таблицу базы данных.

И у меня есть еще один Fragment, в котором есть ListView где я показываю все элементы из базы данных. Я мог бы добавить элемент в базу данных, но он не сразу появляется в ListView, который извлекает элементы из базы данных.

  • 0
    Можете ли вы показать нам свой MyListAdapter ?
Теги:
database

4 ответа

0
Лучший ответ

вы можете использовать метод yourListAdapter.notifyDataSetChanged(), см. это

РЕДАКТИРОВАТЬ :

вы добавляете элемент в базу данных из фрагмента A, поэтому вы должны создать глобальную переменную для вашего спискаAdapter в фрагменте B (тот, который содержит listView), и получить фрагмент в теге Fragment A, а затем вы должны позвонить:

//when you add the fragmentB to your Activity , make sure you set a Tag for it
FragmentB f = (FragmentB) getActivity().getSupportFragmentManager()
                .findFragmentByTag(TAG_FRAGMENT_B);

f.getMyListAdapter().notifyDataSetChanged();

EDIT 2:

в вашем CustomListAdapter добавьте метод для обновления списка объектов (my):

public void setMyList(List myListOfObjects) {
    this.my = myListOfObjects;
    this.notifyDataSetChanged();
}

а затем, когда вы добавляете новый объект в свою базу данных, вытащите все данные из базы данных и вызовите:

f.getMyListAdapter().setMyList(newListOfObjects);//newListOFObjects contains the new data 
  • 0
    Я пытался использовать это, но выдает ошибку, что notifydatasetchanged не определено. Я попытался использовать его в классе dialogfragment после нажатия кнопки мыши.
  • 0
    он не определен, потому что вы вызвали его для экземпляра, который не является вашим listAdpater? какую версию SDK вы используете ???
Показать ещё 12 комментариев
0

Вы должны снова установить адаптер в listView, это поднимет обновление

yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);
0

Создайте глобальный объект из пользовательского класса адаптера.

MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);

И установите адаптер listView:

mListView.setAdapter(mAdapter);

Просто обновите свой массив, названный "мой", в вашем адаптере. А затем позвоните:

 mAdapter.notifyDataSetChanged();

это будет трюк...

  • 0
    обновить массив в адаптере, я не понимаю эту часть? не могли бы вы объяснить немного больше.
  • 0
    Ваш listView показывает только элементы в вашем массиве, которые вы отправляете в свой arrayAdapter, который в вашей ситуации является "моим" ... Вам просто нужно удалить элементы в массиве "my" и добавить новые, или просто добавить один элемент ... . Что бы ты ни захотел. А затем вызовите notifyDataSetChanged, чтобы ваш arrayAdapter узнал, что элементы списка изменились ...
0

Создайте глобальную переменную для MyListAdapter

MyListAdapter adapter;
...

adapter = new MyListAdapter(getActivity(), my);

Создайте геттер во фрагменте, где он существует:

public MyListAdapter getAdapter() {

    return adapter;
}

Когда вы создаете новую запись в базе данных, вызовите это:

//Make sure you make a tag when you add your fragment
MyFrag f = (MyFrag) getActivity().getSupportFragmentManager()
                .findFragmentByTag(YOURTAGHERE);

f.getAdapter().notifyDataSetChanged();

Это должно сработать, но вам нужно будет сделать некоторые отладки/логики, чтобы это сделать.

EDIT: Здесь метод:

public void updateList() {

List<MyItem> l = db.getAllMyItem();

    for(MyItem cn :l )
    {
        cn = l.get(0);
        l.remove(0);
        my.add(new MyList(cn.getName(),0));
    }

}
  • 0
    Я обновил код с этим, но все же я не получил никаких ошибок, но он не обновляет мой список сразу, ничего не происходит.
  • 0
    После того, как вы снова посмотрите на свой код, вам необходимо обновить «мой» List с помощью базы данных. Создайте открытый метод, который делает это, и вызывайте его вместе с notifyDataSetChanged()
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню