Intereting Posts
Получите предпочтение яркости экрана в Android Определить, включена ли моя служба доступности Как использовать изображение / изображение с загрузкой multipart / form-data на Android Различия между различными типами трансляций в android Есть ли какая-либо java-библиотека для чтения штрих-кодов номера вин с изображения? Android, KSoap2 и .NET Web Service с параметрами = результат NULL WebViewCoreThread, используемый admob AdView, использует высокий CPU даже в том случае, если родительская активность приостановлена ​​ Редактирование текста Android скрыто при отображении виртуальной клавиатуры и задействован SurfaceView Разницу между пулемером андроида и пулом потоков исполнителей Android (изменить строку в java-коде) Как подключиться к нескольким базам данных firebase из приложения Android IllegalStateException – поддержка LoaderManager с помощью AutocompleteTextView Установить switchStyle – получить ресурс ошибки не найден – почему? Приложение скомпилируется каждый раз, когда Gradle запускается, принимая значительное время Как вы делаете макеты для нескольких размеров экрана Android?

ChildFragmentManager java.lang.IllegalStateException: активность была уничтожена

Я попытался добавить фрагмент внутри другого фрагмента внутри viewpager, используя getChildFragmentManager() . Я получил следующую ошибку,

Java.lang.IllegalStateException: активность была уничтожена на android.support.v4.app.FragmentManagerImpl.enqueueAction (FragmentManager.java:1549) на android.support.v4.app.BackStackRecord.commitInternal (BackStackRecord.java:654) на android .support.v4.app.BackStackRecord.commitAllowingStateLoss (BackStackRecord.java:625) в com.lakeba.gameon.userprofile.UserProfileContainerFragment.replaceFragment (UserProfileContainerFragment.java:72)

И я пробовал это обходное решение, но все равно получаю такую же ошибку.

UserProfileContainerFragment.java

 public class UserProfileContainerFragment extends CustomFragment { private View rootView; private Fragment fragment1; public UserProfileContainerFragment() { // Required empty public constructor } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } public static UserProfileContainerFragment newInstance() { UserProfileContainerFragment fragment = new UserProfileContainerFragment(); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment rootView = inflater.inflate(R.layout.fragment_user_profile_container, container, false); if(savedInstanceState == null) { UserProfileFragment userProfileFragment = UserProfileFragment.newInstance(); getChildFragmentManager().beginTransaction() .replace(R.id.user_profile_container, userProfileFragment) .commitAllowingStateLoss(); } return rootView; } /*@Override public void onSaveInstanceState(Bundle outState) { //super.onSaveInstanceState(outState); }*/ public void replaceFragment(Fragment fragment, boolean addToBackStack){ fragment1 = fragment; if(addToBackStack){ /*getChildFragmentManager().beginTransaction() .replace(R.id.user_profile_container, fragment) .addToBackStack(null) .commit();*/ getChildFragmentManager().beginTransaction() .replace(R.id.user_profile_container, fragment) .addToBackStack(null) .commit(); //.commitAllowingStateLoss(); } else{ getChildFragmentManager().beginTransaction() .replace(R.id.user_profile_container, fragment) .commit(); //.commitAllowingStateLoss(); } } @Override public void onDetach() { super.onDetach(); try { Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager"); childFragmentManager.setAccessible(true); childFragmentManager.set(this, null); } catch (NoSuchFieldException e) { throw new RuntimeException(e); } catch (IllegalAccessException e) { throw new RuntimeException(e); } } } 

HomeMapActivity.java

 public class HomeMapActivity extends AppCompatActivity implements UserProfileFragment.OnUserProfileFragmentListener{ private Toolbar homeToolbar; private ViewPager homeViewPager; private TabLayout homeTabLayout; private UserProfileContainerFragment userProfileContainerFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home_map); /*homeToolbar = (Toolbar) findViewById(R.id.home_toolbar); setSupportActionBar(homeToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true);*/ homeViewPager = (ViewPager) findViewById(R.id.home_view_pager); HomeViewPagerAdapter homeViewPagerAdapter = new HomeViewPagerAdapter(getSupportFragmentManager()); userProfileContainerFragment = new UserProfileContainerFragment(); homeViewPagerAdapter.addFragment(new UserProfileContainerFragment(),"Profile"); homeViewPager.setAdapter(homeViewPagerAdapter); homeTabLayout = (TabLayout) findViewById(R.id.home_tabs); homeTabLayout.setupWithViewPager(homeViewPager); setTabIcons(homeTabLayout); homeTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { int tabPosition = tab.getPosition(); tab.setIcon(tabIconsArrayActivated[tabPosition]); } @Override public void onTabUnselected(TabLayout.Tab tab) { int tabPosition = tab.getPosition(); tab.setIcon(tabIconsArray[tabPosition]); } @Override public void onTabReselected(TabLayout.Tab tab) { int tabPosition = tab.getPosition(); tab.setIcon(tabIconsArrayActivated[tabPosition]); } }); homeTabLayout.getTabAt(1).select(); } private void setTabIcons(TabLayout homeTabLayout) { homeTabLayout.getTabAt(0).setIcon(tabIconsArray[0]); homeTabLayout.getTabAt(1).setIcon(tabIconsArray[1]); homeTabLayout.getTabAt(2).setIcon(tabIconsArray[2]); homeTabLayout.getTabAt(3).setIcon(tabIconsArray[3]); } @Override public void onUserProfileEditButtonClicked() { userProfileContainerFragment.replaceFragment(EditUserProfileFragment.newInstance(),true); } private class HomeViewPagerAdapter extends FragmentStatePagerAdapter{ private final List<Fragment> mFragmentList = new ArrayList<>(); private final List<String> mFragmentTitleList = new ArrayList<>(); public HomeViewPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { return mFragmentList.get(position); } @Override public int getCount() { return mFragmentList.size(); } @Override public CharSequence getPageTitle(int position) { //return mFragmentTitleList.get(position); return null; } public void addFragment(Fragment fragment,String title){ mFragmentList.add(fragment); mFragmentTitleList.add(title); } } } 

Solutions Collecting From Web of "ChildFragmentManager java.lang.IllegalStateException: активность была уничтожена"

Если вы посмотрите на код в методе onCreate (), вы увидите строки:

 userProfileContainerFragment = new UserProfileContainerFragment(); homeViewPagerAdapter.addFragment(new UserProfileContainerFragment(),"Profile"); 

Сначала вы инициализируете поле userprofileContainerFragment новым экземпляром UserProfileContainerFragment, а затем прямо под ним создается новый экземпляр UserProfileContainerFragment, который будет использоваться в ViewPager (вы можете легко заметить это, разместив оператор журнала в конструкторе UserProfileContainerFragment … вы, Вы увидите два экземпляра). Позже в коде вы пытаетесь использовать поле userProfileContainerFragment, которое приведет к сбою, поскольку этот экземпляр UserProfileContainerFragment вообще не привязан к этой операции (это не фрагмент, используемый ViewPager).

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

 userProfileContainerFragment = new UserProfileContainerFragment(); homeViewPagerAdapter.addFragment(userProfileContainerFragment,"Profile");