在Android Java中更改另一个片段中的片段
我正在处理片段,在尝试从当前片段更改片段时遇到异常。 基本设计是:在Android Java中更改另一个片段中的片段,java,android,android-fragments,fragment,illegalstateexception,Java,Android,Android Fragments,Fragment,Illegalstateexception,我正在处理片段,在尝试从当前片段更改片段时遇到异常。 基本设计是: 具有框架布局的活动 最初放置在活动框架布局中的片段 片段A布局有一个框架布局,比如说框架A 最初加载到框架布局中的子片段 主要的设计思想是按下一个按钮Child_Fragment_a,在框架布局中加载Child_Fragment_B。 目前,在Child_Fragment_A中按钮的点击侦听器中,我使用以下代码实现此目的 if (v.getParent() != null) { FragmentTrans
if (v.getParent() != null) {
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.child_fragment, new searchResults());
transaction.addToBackStack(null);
transaction.commit();
Log.d("mActivity", "loadfragment()");
}
else{
((ViewGroup)v.getParent()).removeView(v);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.child_fragment, new searchResults());
transaction.addToBackStack(null);
transaction.commit();
Log.d("mActivity", "loadfragment()");
}
此onClick()是在Child_Fragment_A的OnCreateView中实现的。但是,这会导致以下异常:
例外情况
D/AndroidRuntime: Shutting down VM
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rehnsehan, PID: 2114
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:5235)
at android.view.ViewGroup.addView(ViewGroup.java:5064)
at android.view.ViewGroup.addView(ViewGroup.java:5004)
at android.view.ViewGroup.addView(ViewGroup.java:4976)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:887)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:439)
at androidx.fragment.app.FragmentManagerImpl.executeOps(FragmentManagerImpl.java:2079)
at androidx.fragment.app.FragmentManagerImpl.executeOpsTogether(FragmentManagerImpl.java:1869)
at androidx.fragment.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManagerImpl.java:1824)
at androidx.fragment.app.FragmentManagerImpl.execPendingActions(FragmentManagerImpl.java:1727)
at androidx.fragment.app.FragmentManagerImpl$2.run(FragmentManagerImpl.java:150)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
希望我能充分解释我的问题,请指出我遗漏了什么或做错了什么。谢谢。请包括整个堆栈trace@ianhanniballake在编辑中添加了它