Как передать данные между Fragment'ами при обратной навигации
В приложении есть контейнер, в котором хранятся фрагменты, изначально там находится Fragment1. Fragment2 собирает какие-то данные и возвращает их Fragment1. Эти данные успешно сохраняются в переменных. Но некоторые значения нужно вывести, например, в editText. Если присваивать значения editText напрямую или через переменную, то они присваиваются, но после завершения метода OnCreateView заменяются на старые, которые были до вызова Fragment2. Как это исправить?
Код Fragment1
class Fragment1 : Fragment
{
EditText editText;
String newValue="";
public static Fragment1 NewInstance()
{
return new Fragment1();
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.layout1, container, false);
Button button1 = view.FindViewById<Button>(Resource.Id.button1);
button1.Click += Button1_Click;
editText = view.FindViewById<EditText>(Resource.Id.editText1);
editText.TextChanged += EditText_TextChanged;
editText.Text = newValue;
return view;
}
private void EditText_TextChanged(object sender, Android.Text.TextChangedEventArgs e)
{
String text = editText.Text;
}
private void Button1_Click(object sender, EventArgs e)
{
var transaction = FragmentManager.BeginTransaction();
var fragment = Fragment2.NewInstance();
fragment.SetTargetFragment(this,100);
transaction.Replace(Resource.Id.container, fragment);
transaction.AddToBackStack(null);
transaction.Commit();
}
public override void OnActivityResult(int requestCode, [GeneratedEnum] Result resultCode, Intent data)
{
if(requestCode == 100 && resultCode == Result.Ok)
{
//Сохранение значения сразу в editText
editText.Text = data.GetStringExtra("data");
//Сохранение значения в переменную, с последующим присвоением editText
newValue = data.GetStringExtra("data");
}
base.OnActivityResult(requestCode, resultCode, data);
}
}
Код Fragment2
class Fragment2 : Fragment
{
public static Fragment2 NewInstance()
{
return new Fragment2();
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View view = inflater.Inflate(Resource.Layout.layout2, container, false);
Button button1 = view.FindViewById<Button>(Resource.Id.button1);
button1.Click += Button1_Click;
return view;
}
private void Button1_Click(object sender, EventArgs e)
{
Intent data = new Intent();
data.PutExtra("data", "1234");
TargetFragment.OnActivityResult(100, Result.Ok, data);
FragmentManager.PopBackStack();
}
}