Педача данных между фрагментами и их просмотр в новом окне
Имеется одна пустая активность с Frame_layout (match_parent) для двух фрагментов. В одном находится ListView, в другом TextView. Нужно при выборе элемента из ListView в первом фрагменте , передавать getItemAtPosition (String значение) в TextView второго фрагмента. Попытался сделать это через интерфейс, вызывая метод в 1 фрагменте, передавая параметр и переопределяя метод в активити, но приложение аварийно закрывается при нажатии. Искал информацию на различных источниках, ситуация такая: либо оба фрагмента находятся рядом на одном активити (что мне не подходит); либо передача идет с Активити на Активити. Не понимаю как передавать данные между фрагментами с последующим его открытием. Код ниже:
FirstFragment:
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedItem = (String)list.getItemAtPosition(position);
OnSelectedItemListener listener = (OnSelectedItemListener) getActivity();
listener.onItemClick(selectedItem);
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.fragmentBox, new ReportViewFragment()).addToBackStack(null).commit();
}
});
public interface OnSelectedItemListener{
void onItemClick (String selectionItem);
}
SecondFragment:
public void setTitle (String item){
TextView textView = getView().findViewById(R.id.title);
textView.setText(item);
}
Activity:
@Override
public void onItemClick(String selectionItem) {
ReportViewFragment frView = (ReportViewFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentBox);
if(frView != null){
frView.setTitle(selectionItem);
}
}
Ответы (1 шт):
Передать данные в другой фрагмент можно при переходе на него из первого фрагмента. Переход делается так:
Fragment fragment = new SecondFragment();
Bundle bundle = new Bundle();
bundle.putString(key, value); // тут нужно положить ваш selectionItem
fragment.setArguments(bundle);
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.content_frame, fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
и дальше в втором фрагменте получаем данные в функции onCreate():
Bundle bundle = this.getArguments();
if (bundle != null) {
String selectionItem= bundle.getString(key, defaultValue);
}
TextView textView = getView().findViewById(R.id.title);
textView.setText(selectionItem);