После долгих часов исследований я наконец-то решил эту проблему следующим образом:
Поскольку у меня есть два вложенных фрагмента как дочерний и родительский в одном действии, и я планирую принять меры по каждому элементу, щелкните элементы recyclerView и перейдите к другому действию, чтобы получить результат и обновив список, я добавил этот код в MainActivity:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getSupportFragmentManager().getFragments().get(1);
fragment.onActivityResult(requestCode, resultCode, data);
}
, который выбирает целевой фрагмент (parentFragment) для передачи данных, а затем в этот родительский фрагмент я добавляю этот метод:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment fragment = getChildFragmentManager().getFragments().get(1);
fragment.onActivityResult(requestCode, resultCode, data);
}
для отправки onActivityResult дочернему фрагменту. Ведь в дочернем фрагменте:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == 2){
if (resultCode == Activity.RESULT_OK) {
int position = data.getIntExtra("position", -1);
userRequestsViewModel.getResult().remove(position);
viewHolder.rView.getAdapter().notifyItemRemoved(position);
viewHolder.rView.getAdapter().notifyItemRangeChanged(position, viewHolder.rView.getAdapter().getItemCount());
}
}
}
чтобы обновить адаптер recyclerView и уведомить его об удалении предмета! Другим важным моментом является то, что в адаптере я только что сделал это:
Intent intent = new Intent(view.getContext(), SecondActivity.class);
intent.putExtra(KEY_POSITION, position);
((Activity) context).startActivityForResult(intent, 2);
и удалите эту строку кода:
intentRequestDetails.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
и, конечно, я передал контекст действия от фрагмента к адаптеру: просто
getContext()
Надеюсь, это сработает и у вас, если вы однажды столкнетесь с такой проблемой