0

У меня есть два действия, каждый из которых содержит фрагменты. Активность A имеет фрагмент с ListView. Строки ListView получены из SQLiteDatabase.Как notifydatassetanged между двумя действиями

Активность В содержит фрагмент, который позволяет редактировать записи базы данных. Когда пользователь редактирует запись базы данных, сохраняет данные, а затем возвращается в активность А через BackButton или:

actionBar = getSupportActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setHomeButtonEnabled(true); 

Как уведомить ListView в деятельности А что произошло изменение в базе данных? Я понимаю, как общаться между Activity и его фрагментами, но как я могу реализовать notifydatasgetanged, когда фрагменты находятся в двух разных действиях?

Я подозреваю, что возврат к активности А с помощью кнопки «Назад» - это просто вызов представления из стека, но это изменение изменилось при изменении базы данных.

+2

Requery набор данных в onResume в activyty А. – X3Btel

+0

Возможный дубликат [Android ListView не освежает после notifyDataSetChanged] (http://stackoverflow.com/questions/14503006/android-listview-not-refreshing-after-notifydatasetchanged) – gevorg

+0

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

ответ

0

Вы можете просто позвонить notifyDataSetChanged в onResume в свою деятельность A. Поэтому, когда вы закрываете или возвращаетесь из Activity B в A, он обновляет данные. Не забудьте проверить, не отличается ли адаптер от нуля, иначе он может упасть при первом открытии приложения.

Вы также могли бы сделать публичную функцию в вашей деятельности А, обновляет список и назовите его из вашей деятельности Б.

class ActivityA 

public static void updateList() { 
    if(adapter != null){ 
     adapter.notifyDataSetChanged; 
    } 
} 


class ActivityB 

ActivityA.updateList(); 

Надеется, что это помогает :)

0

Вам нужно будет прочитать обновленным набора данных из базы данных SQLite и снова передать адаптер. После того, как вам потребуется уведомить адаптер. Например, как в коде ниже:

В вашей деятельности

@Override 
protected void onResume() { 
    super.onResume(); 

    // method to read new dataset 
    Database ourDB = new Database(this); 
    ourDB.openDB(); 
    data = ourDB.getData(); 
    ourDB.closeDB(); 

    if(adapter == null) { 
     // initializes adapter when first launched 
     adapter = new RecyclerViewAdapter(data, this); 
     yourListView.setAdapter(adapter); 
    } 
    else { 
     // in subsequent returns to activity we are replacing 
     // old data with new and reusing existing adapter 
     adapter.updateData(data); 
    } 

} 

В классе адаптера включают подобный метод:

public void updateData(ArrayList<String> newData) { 
    data = newData; 
    this.notifyDataSetChanged(); 
} 
+0

@ user2254532 Вы решили проблему? Если вы не попробовали мое решение? – Marat

0

вы могли бы начать деятельность с startActivityForResult (начать activityB) и переопределить метод onActivityResult в activityA и notifyDataSetChanged при необходимости.

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