#android #activity #android_fragment
Пишу небольшую программку для андроида. Мне нужно создать программно фрагменты. Для этого я написал отдельный класс с функциями FragmentWorkHelper.java: public class FragmentWorkHelper extends FragmentActivity { FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction ft; public MainTopCompositeFragment mtcf = new MainTopCompositeFragment(); public MainCentralCompositeFragment mccf = new MainCentralCompositeFragment(); public MainBottomCompositeFragment mbcf = new MainBottomCompositeFragment(); public void ReplaceFrag(Fragment f, int container){ ft = fragmentManager.beginTransaction(); ft.replace(container, f); ft.commit(); } public void RemoveFrag(Fragment f){ ft = fragmentManager.beginTransaction(); ft.remove(f); ft.commit(); } public void AddFrag(Fragment f, int container){ ft = fragmentManager.beginTransaction(); ft.add(container, f); ft.commit(); } public void CreateFrag(){ ft = fragmentManager.beginTransaction(); ft.add(R.id.main_top_fragment, mtcf); ft.add(R.id.main_central_fragment, mccf); ft.add(R.id.main_bottom_fragment, mbcf); ft.commit(); } } Вызываю функции этого класса из различных мест программы, например в OnCreate() в MainActivity.java: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FragmentWorkHelper fwh = new FragmentWorkHelper(); fwh.CreateFrag(); } Но в итоге получаю вот что: Process: developers.com.polygon, PID: 27767 java.lang.RuntimeException: Unable to start activity ComponentInfo{developers.com.polygon/developers.com.polygon.MainActivity}: java.lang.IllegalStateException: Activity has been destroyed at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758) at android.app.ActivityThread.access$900(ActivityThread.java:177) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:145) at android.app.ActivityThread.main(ActivityThread.java:5942) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195) Caused by: java.lang.IllegalStateException: Activity has been destroyed at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1399) at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:637) at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:616) at developers.com.polygon.FragmentWorkHelper.CreateFrag(FragmentWorkHelper.java:43) at developers.com.polygon.MainActivity.onCreate(MainActivity.java:51) at android.app.Activity.performCreate(Activity.java:6289) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646) В чем беда? Почему активити уничтожается? Я пытался засунуть функции в MainActivity, но выходит та же самая ошибка. Очень нужна помощь.
Ответы
Ответ 1
getSupportFragmentManager возвращает менеджер для взаимодействия фрагментов с activity из которой он вызван. Соответственно ваш хелпер бесполезен т.к. он может управлять фрагментами только внутри своей activity, а не во всех activity вашего приложения. Если хелпер вам так нужен то сделайте так public class FragmentWorkHelper{ private final FragmentActivity activity; public FragmentWorkHelper(FragmentActivity activity) { this.activity = activity; } public void replaceFrag(Fragment f, int container){ FragmentTransacion ft = activity.getSupportFragmentManager().beginTransaction(); //some work } public void removeFrag(Fragment f){ FragmentTransacion ft = activity.getSupportFragmentManager().beginTransaction(); //some work } public void addFrag(Fragment f, int container){ FragmentTransacion ft = activity.getSupportFragmentManager().beginTransaction(); //some work } } И тогда в activity в методе onCreate() создавайте экземпляр этого хелпера FragmentWorkHelper helper = new FragmentWorkHelper(this).
Комментариев нет:
Отправить комментарий