Фрагмент ViewPager уже добавлен в DialogFragment - PullRequest
0 голосов
/ 16 марта 2020

У меня есть фрагмент A с ViewPager, который работает, как я ожидаю. В нижней части фрагмента A у меня есть одна кнопка, которая показывает новый DialogFragment с новым ViewPager. когда я нажимаю кнопку и появляется DialogFragment, я улавливаю эту ошибку:

java.lang.IllegalStateException: Fragment already added

код в DialogFragment:

public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    mAdapter = new AddNewLeitnerViewPagerAdapter(getChildFragmentManager());
    mAdapter.addPage("Title" , new TranslationDialogFragment());
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    LayoutInflater inflater = requireActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.dialog_add_new_item_leitner, null);
    builder.setView(view);
    mPager = view.findViewById(R.id.view_pager_add_new_leitner);
    mPager.setAdapter(mAdapter);

    return builder.create();
}

коды в ViewPagerAdapter:

public class AddNewLeitnerViewPagerAdapter extends FragmentPagerAdapter {
List<String> titles = new ArrayList<>();
List<Fragment> mFragments = new ArrayList<>();

public AddNewLeitnerViewPagerAdapter(@NonNull FragmentManager fm) {
    super(fm,BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}

@NonNull
@Override
public Fragment getItem(int position) {
    return mFragments.get(position);
}

@Override
public int getCount() {
    return mFragments.size();
}

@Nullable
@Override
public CharSequence getPageTitle(int position) {
    return titles.get(position);
}

public void addPage(String title,Fragment fragment){
    titles.add(title);
    mFragments.add(fragment);
    notifyDataSetChanged();
}

}

трассировка стека:

   java.lang.IllegalStateException: Fragment already added: TranslationDialogFragment{224f367} (d95f88ab-18a5-4474-b75d-ffb9e0c1cdfc) id=0x7f09014d android:switcher:2131296589: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)

в чем проблема ??

...