У меня есть DialogFragment
откуда я добавляю элемент в таблицу базы данных.
И у меня есть еще один Fragment
, в котором есть ListView
где я показываю все элементы из базы данных. Я мог бы добавить элемент в базу данных, но он не сразу появляется в ListView
, который извлекает элементы из базы данных.
вы можете использовать метод 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
Вы должны снова установить адаптер в listView, это поднимет обновление
yourAdapter.notifyDataSetChanged();
listView.setAdapter(yourAdapter);
Создайте глобальный объект из пользовательского класса адаптера.
MyListAdapter mAdapter = new MyListAdapter(getActivity(), my);
И установите адаптер listView:
mListView.setAdapter(mAdapter);
Просто обновите свой массив, названный "мой", в вашем адаптере. А затем позвоните:
mAdapter.notifyDataSetChanged();
это будет трюк...
Создайте глобальную переменную для 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));
}
}
List
с помощью базы данных. Создайте открытый метод, который делает это, и вызывайте его вместе с notifyDataSetChanged()
MyListAdapter
?