В первом фрагменте заполняю List mItemList элементами из базы. Далее вывожу список элементов через RecyclerView на экране. Тут всё ок.
Вызываю второе активити с фрагментом через startActivityForResult() по нажатию на кнопку в первом фрагменте. Во втором фрагменте добавляю новый элемент в базу, устанавливаю результат и метод finish().
Далее в первом фрагменте получаю ответ в onActivityResult(), обновляю List mItemList (получаю новый список элементов), вызываю у адаптера RecyclerView метод .notifyDataSetChanged() но список на экране не обновляется.
public class ItemListFragment extends Fragment {
private List<Item> mItemList;
private RecyclerView mRecyclerView;
private ItemListAdapter mItemListAdapter;
private FloatingActionButton mFab;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_item_list, container, false);
mItemList = getItemList(); // Берет данные из базы
mItemListAdapter = new ItemListAdapter(getContext(), mItemList);
mRecyclerView = view.findViewById(R.id.recycler_view);
mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
mRecyclerView.hasFixedSize();
mRecyclerView.setAdapter(mItemListAdapter);
mFab = view.findViewById(R.id.fab);
mFab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivityForResult(ItemAddActivity.newIntent(getActivity()), 6);
}
});
return view;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 6) {
if (resultCode == getActivity().RESULT_OK) {
mItemList = getItemList();
// Проверяю что на самом деле List с item увеличился
Log.d("MY_TEST", String.valueOf(mItemList.size()));
// Обновляю адаптер, но список item'ов не обновляется на экране
mItemListAdapter.notifyDataSetChanged();
}
}
}
}
Проблема вот тут:
if (resultCode == getActivity().RESULT_OK) {
mItemList = getItemList(); // <- issue
// Проверяю что на самом деле List с item увеличился
Log.d("MY_TEST", String.valueOf(mItemList.size()));
// Обновляю адаптер, но список item'ов не обновляется на экране
mItemListAdapter.notifyDataSetChanged();
}
список в адаптере не изменится, потому что mItemList
теперь будет указывать на новый список. Чтобы список и в адаптере изменился, нужно не изменять ссылку mItemList
, а изменить данные в ней:
if (resultCode == getActivity().RESULT_OK) {
mItemList.clear();
mItemList.addAll(getItemList());
// Проверяю что на самом деле List с item увеличился
Log.d("MY_TEST", String.valueOf(mItemList.size()));
// Обновляю адаптер, но список item'ов не обновляется на экране
mItemListAdapter.notifyDataSetChanged();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Все это происходит в проекте на базе Spring Boot 2, DB - PostgreSQL
Есть ключ зашифрованный Triple DES на C# 16 байтНеобходимо расшифровать в коде написанном на Java, но Triple DES на java из документации следует:
У меня есть объекты рассылки, в которых есть параметр времениВ это время они должны быть отправлены на e-mail пользователям