Есть ли способ назначить Bundle фрагменту, уже созданному ?. Я пробовал что-то вроде этого:Связывание во фрагменте, создаваемом
Bundle mArgumentos = new Bundle();
mArgumentos.putString("id", id);
this.setArguments(mArgumentos);
Но я получаю сообщение об ошибке: Фрагмент уже активен.
Мне просто интересно, могу ли я достичь этого без переопределения метода onBackPressed().
Моя цель в том, что у меня есть форма для регистрации нового элемента. Отсюда я могу перейти к другому фрагменту (назовем его фрагментом_B) новым идентификатором элемента (я вызываю фрагмент_B с комплектом, назначающим новый идентификатор). Когда пользователь нажимает кнопку «Назад», он переходит к предыдущей форме, но идентификатор отсутствует (это связано с тем, что форма переходит в предыдущее состояние, например, пустая), поэтому, если он снова попытается перейти к фрагменту_B, он не может использовать этот идентификатор.
Очевидно, пользователь не может перейти к фрагменту_B, если форма не была сохранена. Таким образом, пользователь сохраняет форму, а затем нажмите кнопку, чтобы перейти к fragment_B с новым идентификатором:
FragmentB fragment = new FragmentB();
Bundle mArgumentos = new Bundle();
mArgumentos.putString("id",id);
fragment.setArguments(mArgumentos);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment, tag);
ft.addToBackStack(tag);
ft.commit();
Все предложения ?.
Edit:
Фрагменты не в одной и той же деятельности. Когда я создаю новый элемент и нажимаю кнопку «Сохранить», я должен быть в «режиме редактирования». Это означает, что после создания элемента я могу вернуться и отредактировать его. Я просто использую тот же фрагмент для редактирования и создания. Поэтому, когда я создаю элемент, нажмите кнопку, чтобы перейти к фрагменту_B, а затем нажмите кнопку «Назад», я должен быть «режимом редактирования» этого элемента. Это означает, что от фрагмента_B до предыдущего я должен передать идентификатор созданного элемента. Вот почему я хочу знать, могу ли я сделать это без переопределения метода onBackpress.
Edit2:
Если нет другого пути для достижения этой цели, я мыслил переопределить метод onBackpress так:
//get the fragment where I'm staying on.
Fragment fragmentActual = this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);
//get the tag of the fragment
String fragmentTag = fragmentActual.getTag().toString();
if (fragmentTag.equals("tagFragmentB")){
Fragment fragmentA = new FragmentA();
Bundle mArguments = fragmentActual.getArguments();
String id = mArguments.getString("id");
if(id != null){
fragmentA .setArguments(mArguments);
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(android.R.id.tabcontent, fragment, "fragmentA");
ft.addToBackStack("fragmentA");
ft.commit();
}
}else{
super.onBackPressed();
}
Это работает, но у вас есть уведомление, это изменить порядок фрагментов, вызванных пользователем, и это должно быть невидимым для пользователя. Таким образом, это заставляет меня вводить больше кода, чтобы получить вызовы, которые пользователь сделал.
Я вроде как новый, так что, возможно, у меня нет «мышления Android». Если есть лучший способ сделать то, что я хочу, я открыт для всего. Я просто хочу правильно подумать и не буду иметь проблем в будущем только потому, что пользователь нажал кнопку «Назад».
Вы не предоставили полный комплект деталей о том, что вы делаете так (например, те фрагменты, в одной и той же деятельности): * Есть в любом случае присвоить Bundle к фрагмент уже создан? * - нет. Прежде всего, должен ли пользователь вернуться к форме? У вас есть форма для регистрации нового элемента, и вы передаете это другому фрагменту с идентификатором. Но если вы вернетесь к форме, это не форма, которая должна создать новый элемент (так почему нужно перейти к фрагменту b со старым идентификатором)? И после того, как вы попадете в форму (из фрагмента b), как вы снова переходите к фрагменту b? – Luksprog
Followup: Если вы выполните те же действия, что и при создании нового элемента, вы не совсем поняли это. Если вы разрешите форме редактировать вновь созданный фрагмент b на обратной кнопке, нажмите фрагмент формы, чтобы увидеть новый фрагмент и извлечь его данные без необходимости использования явного идентификатора. После того, как вы разобрались с этим, я хотел бы, чтобы фрагменты обменивались информацией с родительской активностью (и передавали идентификатор между ними) и позволяли ей сортировать хранилище идентификаторов и использовать их. – Luksprog
привет Luksprog спасибо за помощь снова;). Я только что редактировал мой вопрос. – kiduxa