bmelnychuk / AndroidTreeView

AndroidTreeView. TreeView implementation for android
Apache License 2.0
3k stars 621 forks source link

Exception when recreating tree view. #159

Open akench opened 6 years ago

akench commented 6 years ago

I have a fragment with an android tree view in it. When I click a Node, It opens a new fragment displaying information on that node. This is how the new fragment is displayed:

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.setCustomAnimations(R.anim.enter, R.anim.exit, R.anim.pop_enter, R.anim.pop_exit).replace(R.id.fragment_container, fragment, null).addToBackStack(null).commit();

The new fragment loads fine, but when I click the back button, it tries to recreate that tree view from the first fragment, and I get this error. How can I fix this?

Also, this is the line that the app is crashing: this.swipeRefreshLayout.addView(treeView.getView());

where private AndroidTreeView treeView; private SwipeRefreshLayout swipeRefreshLayout;

Here is the full stack trace. Thanks!

E/InputEventSender: Exception dispatching finished signal. E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback E/MessageQueue-JNI: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. at android.view.ViewGroup.addViewInner(ViewGroup.java:4937) at android.view.ViewGroup.addView(ViewGroup.java:4768) at android.view.ViewGroup.addView(ViewGroup.java:4708) at android.view.ViewGroup.addView(ViewGroup.java:4681) at com.unnamed.b.atv.view.AndroidTreeView.addNode(AndroidTreeView.java:259) at com.unnamed.b.atv.view.AndroidTreeView.expandNode(AndroidTreeView.java:241) at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:137) at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:142) at com.example.development.sakaiclientandroid.fragments.AllCoursesFragment.onCreateView(AllCoursesFragment.java:77) at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419) at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1740) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1809) at android.support.v4.app.BackStackRecord.executePopOps(BackStackRecord.java:857) at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2577) at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2367) at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2322) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:851) at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:794) at android.support.v4.app.FragmentActivity.onBackPressed(FragmentActivity.java:174) at android.app.Activity.onKeyUp(Activity.java:2980) at android.view.KeyEvent.dispatch(KeyEvent.java:2715) at android.app.Activity.dispatchKeyEvent(Activity.java:3272) at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:534) at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:58) at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:316) at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:354) at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4733) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4605) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4293) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:4350) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:4174) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:4147) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:4200) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:4166) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:4326) at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4487) at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2435) at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1998) at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1989) at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onI D/AndroidRuntime: Shutting down VM

omfg74 commented 6 years ago

Try to swap null in R.anim.pop_exit).replace(R.id.fragment_container, fragment, null).addToBackStack(null).commit(); into false

also you need to create a new ArreyListlist in each eteration