У меня проблема с активностью с вкладками (автоматически генерируется Android Studio)
Моя активность с вкладками (основная) содержит 2 вкладки,
В первом фрагменте (tab1) я сгенерирую флажки для второго фрагмента (tab2),
, поэтому мой первый фрагмент (tab1)
public class Frag1 extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recette_menu_activity, container, false);
mButton1 = view.findViewById(R.id.button1);
mButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent otherActivity1 = new Intent(getContext(), PizzaActivity.class);
startActivity(otherActivity1);
//finish();
}
});
return view;
}
/*------------------------------------------------------------------*\
|* Attributs Private *|
\*------------------------------------------------------------------*/
private Button mButton1;
}
Пицца при создании создаст карту с данными et c ... not важно
когда я нажимаю «валидная кнопка», я хочу, чтобы мое приложение вернулось к моей вкладке, но я не знаю, является ли это правильным способом? (я не думаю, что это проблема)
valideButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < savedMap.size(); i++) {
if (tabCheckBox[i].isChecked() == false) {
savedMap.get(tab[i]).setIsCheck(false);
}
}
hasAppendOneTime = true;
//je remet le map dans l'objet savedRecette que j'avais du sortir de la classe pour l'envoyer ici
savedRecette.setHashMap(savedMap);
recetteListFinal.add(savedRecette);
Intent otherActivity1 = new Intent(getApplicationContext(), MainActivity.class);
startActivity(otherActivity1);
finish();
}
});
и теперь мой второй фрагмент (tab2), где я динамически генерирую флажки в своем фрагменте
public class Frag2 extends Fragment {
static int index;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_liste_de_commission, container, false);
textViewRecetteTitle = view.findViewById(R.id.textView_Liste_de_commission);
gridLayout = view.findViewById(R.id.grid_layout);
if (hasAppendOneTime == true) {
ingredientsAdapter = new IngredientsAdapter(context);
for (int j = 0; j <= nbRecetteValidee; j++) {
for (int i = 0; i < recetteListFinal.get(j).getMapIngredients().size(); i++) {
stringList.add((String) recetteListFinal.get(j).getMapIngredients().keySet().toArray()[i]);
if (recetteListFinal.get(j).getMapIngredients().get(stringList.get(i)).getCheck() == true) {
listCheckBox.add(ingredientsAdapter.createCheckBox(getContext(), stringList.get(i)));
gridLayout.addView(listCheckBox.get(i));
}
}
}
nbRecetteValidee = +1;
}
return view;
}
/*------------------------------------------------------------------*\
|* Attributs Private *|
\*------------------------------------------------------------------*/
private Context context;
private GridLayout gridLayout;
private IngredientsAdapter ingredientsAdapter;
private TextView textViewRecetteTitle;
static final List<CheckBox> listCheckBox = new ArrayList<CheckBox>();
final List<String> stringList = new ArrayList<String>();
при первом создании 1 map, поместите в нее данные, а затем создайте флажок в frag2
, поэтому моя проблема в том, что когда я генерирую 2-ю карту с данными и хочу сгенерировать свои флажки для этих 2-х карт, она создает sh и скажите мне: «Фрагмент уже добавлен»
Я уже перечитал много вопросов о переполнении стека и обнаружил, что метод
if(mFragment.isAdded())
{
return; //or return false/true, based on where you are calling from
}
, но я не знаю, где его использовать? и если это действительно моя проблема
здесь мой Cra sh
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.projet.cookingcoupie, PID: 21241
java.lang.IllegalStateException: Fragment already added: Frag1{1c2bc0e} (7698f92f-bcbc-413b-8ce6-37f15cf532fd) id=0x7f08013d android:switcher:2131231037:0}
at androidx.fragment.app.FragmentStore.addFragment(FragmentStore.java:67)
at androidx.fragment.app.FragmentManager.addFragment(FragmentManager.java:1563)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:405)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2167)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1990)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1945)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1847)
at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7356)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
все ответы приветствуются:)