当我尝试从滑动选项卡中SearchFragment
的子片段 () 替换父片段 ()时,出现此错误。基本上我想要实现的是在每个子片段中有一个带有多个按钮的滑动选项卡菜单,用于关闭滑动选项卡菜单并打开不同的现有片段。它位于 Navigation Drawer 活动中,按钮的目标片段也是如此。ClassroomsTab
viewPager
SearchFragment
根据我的阅读,解决此问题的方法是替换getChildFragmentManager()
这行代码中的 :viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
用getActivity().getSupportFragmentManager()
or getFragmentManager()
。这解决了应用程序崩溃的问题,但是当我通过新片段中的导航抽屉单击搜索选项卡时,大多数带有按钮的滑动选项卡子片段都不会显示。
谢谢您的帮助 :)
SearchFragment
OnCreateView
代码:
public TabLayout tabLayout;
public ViewPager viewPager;
public static int int_items = 5;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//this inflates the tab layout file.
View view = inflater.inflate(R.layout.search_layout,null);
viewPager = (ViewPager) view.findViewById(R.id.viewpager);
tabLayout = (TabLayout) view.findViewById(R.id.tabs);
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
// this puts the titles on the top
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
//this preloads the other tabs. currently only have it set to one for testing
viewPager.setOffscreenPageLimit(1);
return view;
}
ClassroomsTab
代码(我在测试时现在只有一个按钮):
注意:content_frame
是导航活动的框架布局
public class ClassroomsTab extends Fragment {
View myView;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
myView = inflater.inflate(R.layout.classrooms, container, false);
defineButtons();
return myView;
}
public void defineButtons() {
Button CR1C1 = (Button)myView.findViewById(R.id.CR1C1);
CR1C1.setOnClickListener(buttonClickListener);
}
private View.OnClickListener buttonClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fragmentmanager = getFragmentManager();
switch (view.getId()) {
case R.id.CR1C1:
fragmentmanager.beginTransaction()
.replace(R.id.content_frame
,new MapFragment())
.commit();
break;
}
}
};
完全错误
09-08 15:52:13.154 12220-12220/com.example.jeremy.app E/AndroidRuntime:致命异常:主进程:com.example.jeremy.app,PID:12220 java.lang.IllegalArgumentException:找不到视图android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1417) 上 android.support 上片段 MapFragment{c7d968f #2 id=0x7f0800c4} 的 id 0x7f0800c4 (com.example.jeremy.app:id/content_frame)。 v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1754) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1822) 在 android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java: 797) 在 android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2591) 在 android.support.v4.app.FragmentManagerImpl。executeOpsTogether(FragmentManager.java:2378) 在 android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2333) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2240) 在 android.support .v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os .Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit $MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)807)807)第2378章$1.run(FragmentManager.java:703) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper .java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit .java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)第2378章$1.run(FragmentManager.java:703) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper .java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit .java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)removeRedundantOperationsAndExecute(FragmentManager.java:2333) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2240) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703) 在 android。 os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main (ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os .ZygoteInit.main(ZygoteInit.java:807)removeRedundantOperationsAndExecute(FragmentManager.java:2333) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2240) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703) 在 android。 os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main (ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os .ZygoteInit.main(ZygoteInit.java:807)execPendingActions(FragmentManager.java:2240) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703) 在 android.os.Handler。 dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native方法)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)execPendingActions(FragmentManager.java:2240) 在 android.os.Handler.handleCallback(Handler.java:790) 在 android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:703) 在 android.os.Handler。 dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native方法)在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)99) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android .internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)99) 在 android.os.Looper.loop(Looper.java:164) 在 android.app.ActivityThread.main(ActivityThread.java:6494) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android .internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)