вкладка активность, фрагмент уже добавлен - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблема с активностью с вкладками (автоматически генерируется 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)

все ответы приветствуются:)

...