Если вы используете Room, вам не нужно использовать setResult
для переноса нового элемента в любой из этих предыдущих фрагментов / действий, поскольку Room автоматически управляет аннулированием.
@Dao
public interface MyDao {
@Query("SELECT * FROM ITEM")
LiveData<List<Item>> getItemsWithChanges();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertItem(Item item);
}
Тогда
public class MyViewModel extends ViewModel {
private final LiveData<List<Item>> items;
public LiveData<List<Item>> getItems() {
return items;
}
public MyViewModel(MyDao myDao) {
items = myDao.getItemsWithChanges();
}
}
Тогда
public class MyFragment extends Fragment {
MyViewModel myViewModel;
@Override
protected void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
myViewModel = ViewModelProviders.of(getActivity(), viewModelFactory).get(MyViewModel.class);
myViewModel.getItems().observe(getViewLifecycleOwner(), (items) -> {
if(items != null) {
adapter.submitList(items);
}
});
}
}
В этом случае все, что вам нужно сделать во втором упражнении, это вставить новый элемент и закончить:
// imagine this is on background thread
myDao.insertItem(item);
runOnUiThread(() -> {
finish();
});
И все ваши RecyclerViews будут обновлены с новым элементом (если они являются частью результатов, когда условие соответствует ему).