@renya555

Нужна помощь, как обратится к предыдущему фрагменты на удаление?

Есть фрагмент который отображает через RecyclerView в альбоме фото, при открытии фото открывается другой фрагмент. в нем есть кнопка удалить. фото я на сервере удаляю. но при переходе обратно в альбом по кнопке назад фото на месте пока не перезапустишь фрагмент.

Я пока не совсем понимаю, как реализовать наверное слушателя в фрагмент1 и со фрагмент2 отправить запрос на удаление в первый по ID фото из . закрывать фрагмент и чтоб не было данного фото уже в списке. подскажите пжста как правильно реализовать, куда капать?
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ответы на вопрос 1
@terminator-light
тут есть 2 подхода:
1) простой:
используя жизненный цикл фрагментов, можно в коллбеке onResume просто перезагрузить список
минус: перезагрузится весь список

2) правильный

создать интерфейс, реализуемый активити
interface OnRemoveItemListener{
   void removeItem(int pos);
}

public class ListFragment extends Fragment {
	...
    public void itemRemoved(int pos){
    	adapter.getData().remove(pos);
    	adapter.notifyItemRemoved(pos);
    	//это все можно делать внутри адаптера, а здесь просто вызвать его метод
    }

}

public class DetailFragment extends Fragment {
	private OnRemoveItemListener listener;
	//позиция элемента в адаптере RecyclerView
	private int position;

	public static void newInstance(int pos){
		Bundle bundle = new Bundle();
		bundle.putInt("pos", pos);
		DetailFragment f = new DetailFragment();
		f.setArguments(bundle);
		return f;
	}

	@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listener = (OnRemoveItemListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString() + " must implement OnRemoveItemListener");
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        listener = null;
    }

    public void onViewCreated(...){
    	//получаете pos из getArguments() и сохраняете в поле position
    }

//метод удаления на сервере
    public void removeItemFromApi(){
    	...
    	listener.removeItem(position);
    	...
    }

}

public class MainActivity extends AppCompatActivity implements OnRemoveItemListener{
	void removeItem(int pos){
		ListFragment f = (ListFragment)getSupportFragmentManager().findFragmentById(R.id.detailFragment);
		f.itemRemoved(pos);
	}
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы