我有ViewPager三个Fragments,每个显示一个List(或Grid).
在新的Android API level 17(Jelly Bean 4.2)中,其中一个功能是嵌套片段.新功能描述说:
如果您使用ViewPager创建左右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中.
所以,如果我理解正确的话,现在我可以在里面创建一个ViewPagerwith Fragments(里面有一个按钮),当用户按下按钮时显示另一个Fragment没有松动ViewPager使用这个新功能.
我已经花了我的早上尝试实现这几种不同的方式,但我不能让它工作......有人可以添加一个如何实现这个的简单示例吗?
PS:我只对这种方式感兴趣,getChildFragmentManager学习如何运作.
android android-fragments android-viewpager android-support-library android-nested-fragment
我有一个MainDrawer to Fragment活动,它有一个导航抽屉的布局我和我的主要内容,我可以在其中加载新的碎片.我加载的一个片段是calle StatisticsTab Fragment.这个Fragment包含一个tabhost,每个tab都是它自己的listview项的片段.一旦我点击ListView项目,它加载另一个新的片段,我不再在tabHost中,我尝试使用导航器返回到我的StatisticsTab片段,我收到此错误:
03-03 10:32:06.884 24185-24185/com.beerportfolio.beerportfoliopro E/AndroidRuntime? FATAL EXCEPTION: main
java.lang.IllegalStateException: Recursive entry to executePendingTransactions
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1439)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
at android.support.v4.app.FragmentTabHost.onAttachedToWindow(FragmentTabHost.java:283)
at android.view.View.dispatchAttachedToWindow(View.java:12307)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2457)
at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2464)
at android.view.ViewGroup.addViewInner(ViewGroup.java:3567)
at android.view.ViewGroup.addView(ViewGroup.java:3399)
at android.view.ViewGroup.addView(ViewGroup.java:3344)
at android.view.ViewGroup.addView(ViewGroup.java:3320)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:158)
at android.app.ActivityThread.main(ActivityThread.java:5789)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:843)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
如果我没有在StatisticsTab片段上点击我的任何标签,并通过navdrawer导航到另一个片段,然后返回StatisticsTab,那么它就不会FC上.也就是说,当我回到它们时,NavDrawer中的其他任何片段都没有关闭,只有带有标签的片段.
MainDrawer2:
public class MainDrawer2 extends FragmentActivity
{
private static final String EXTRA_NAV_ITEM …Run Code Online (Sandbox Code Playgroud) 是否可以在片段之间切换而无需一直重新创建片段?如果是这样,怎么样?
在文档中,我找到了如何替换Fragments的示例.
// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
Run Code Online (Sandbox Code Playgroud)
但我不希望每次需要时都从头开始创建我的碎片.
// The content view embeds two fragments; now retrieve them and attach
// their "hide" button.
FragmentManager fm = getFragmentManager();
addShowHideListener(R.id.frag1hide, fm.findFragmentById(R.id.fragment1));
addShowHideListener(R.id.frag2hide, fm.findFragmentById(R.id.fragment2));
Run Code Online (Sandbox Code Playgroud)
但是,如何在XML文件外部创建一个带有ID的片段?
我认为这可能与这个问题有关,但没有答案.:/ …