Articles of fragmentmanager

没有支持库的BetterPickers

我使用https://github.com/derekbrameyer/android-betterpickers来为我的应用程序使用时间和dateselect器。 然而,我的应用程序不需要一个支持库,似乎我需要SupportFragmentManager设置FragmentManager时间和DatePickerBuilder:/有没有办法避免支持库?

FragmentManager.getFragmens()。size()不会减lessFragmentTransaction.remove(Fragment)

经过一段时间寻找我的NPE的原因,我注意到,尽pipeFragmentTransaction.remove(片段)真的删除片段,由FragmentManager.getFragments()返回的列表的大小仍然相同。 该屏幕截图显示了删除片段后此方法返回的内容: http://img.androidcookie.com/android/erro fm.PNG 该列表有3个片段,为什么大小仍然是4?

在哪里调用getChildFragmentManager()?

问题 根据Google的文档: 您现在可以将碎片embedded到碎片中。 这对于您想要将dynamic和可重用UI组件放入本身为dynamic且可重用的UI组件的各种情况很有用。 例如,如果使用ViewPager创build左右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中。 要嵌套一个片段,只需在要添加片段的片段上调用getChildFragmentManager()即可。 这将返回一个FragmentManager,您可以像使用顶级活动一样使用FragmentManager来创build片段事务。 例如,下面是一些在现有的Fragment类中添加片段的代码: Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit(); 所以我有(例如) TestFragment ,看起来像: public class TestFragment extends Fragment { private View mFragmentView; private FrameLayout mFrameLayout; public HistoryFragment() { super(); } @Override public View onCreateView(LayoutInflater pInflater, ViewGroup pViewGroup, Bundle pBundle) { mFragmentView = pInflater.inflate(R.layout.fragment_layout, pViewGroup, false); mFrameLayout […]

Android:remove()Fragment – > add()new同一个类的片段再次 – > onCreateView和onActivityCreated不被调用?

我正在销毁一个程序创build的片段: getFragmentManager().beginTransaction().remove(getFragmentManager().findFragmentById(R.id.test)).commit(); 这是在这样的XML文件中确定: <LinearLayout android:id="@+id/test" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> </LinearLayout> 如果我再在主要活动中创build一个来自同一个类的片段: getSupportFragmentManager().beginTransaction() .add(R.id.result_bar, testinstance) .commit(); 然后onCreate似乎不再调用(该片段只是空的)。 我在这里做错了什么? 谢谢。

Android:使用1个活动的主/明细stream(双窗格)

据Android指南报道, 双窗格可以通过两种方式实现: 多个片段, 一个活动 多个片段, 多个活动 我正在使用第一种情况 (Android指南只解释第二种情况)。 这是7“平板电脑上发生的事情: 从横向旋转到纵向 :只有单窗格片段被重新创build 从纵向旋转到横向 :所有3个片段(单窗格,双窗格主,双窗格细节)被重新创build 问题: 为什么单窗格片段 (我用编程方式创build,但使用布局中定义的FrameLayout作为容器) 在双窗格上重新创build? 我在我的实施报告下面: /layout/activity_main.xml: <FrameLayout android:id="@+id/single_pane" android:layout_width="match_parent" android:layout_height="match_parent" /> /layout-w900dp/activity_main.xml: <LinearLayout android:id="@+id/dual_pane" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <fragment class="com.example.MasterFragment" android:id="@+id/master_dual" android:tag="MASTER_FRAGMENT_DUAL_PANE" android:layout_width="@dimen/master_frag_width" android:layout_height="match_parent"/> <fragment class="com.example.DetailFragment" android:id="@+id/detail_dual" android:tag="DETAIL_FRAGMENT_DUAL_PANE" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 这是主要活动的onCreate : protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDualPane = […]

Android片段实现问题

这是我的片段的XML: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.thenewjonathan.foodtracker.fragments.FoodItemDisplay" > <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="50dp" android:textStyle="bold" android:text="blank" android:id="@+id/foodItemNameView" android:gravity="center" android:layout_gravity="top|left|center" android:textAlignment="center"/> <ImageView android:contentDescription="@string/foodPicture" android:layout_width="241dp" android:layout_height="241dp" android:layout_gravity="left|center_vertical" android:background="@color/material_blue_grey_800" android:layout_below="@id/foodItemNameView" android:id="@+id/foodPic" /> <RelativeLayout android:layout_width="140dp" android:layout_height="241dp" android:layout_alignParentRight="true" android:layout_below="@id/foodItemNameView" android:layout_gravity="end|center_vertical" android:gravity="center" android:id="@+id/checkBoxGroup" > <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Monday" android:id="@+id/mondayBox" android:layout_alignParentTop="true" android:layout_alignParentStart="true"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Tuesday" android:id="@+id/tuesdayBox" android:layout_below="@id/mondayBox" android:layout_alignParentStart="true"/> <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Wednesday" android:id="@+id/wednesdayBox" […]

在backstack中添加新片段时,onBackStackChanged()会调用两次

所以,我注意到有趣的问题。 当我以编程方式添加新的片段,onBackStackChangedListener onBackStackChanged方法被调用两次,但它只能调用一次。 这是我的活动代码: import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements FragmentManager.OnBackStackChangedListener{ private FragmentManager fragmentManager; private Button button1; private Button button2; private Button button3; private Fragment defaultFragment; private Fragment previousFragment; private Fragment currentFragment; private String currentFragmentTag; @Override protected void onCreate(Bundle savedInstanceState) { […]

FragmentManager popBackStack不会删除片段

我正在使用Fragments实现菜单导航。 所以我从Home开始,然后用户可以导航到每个部分的不同部分和细节。 当用户更改部分时,我在fragmentmanager的backstack上调用pop,直到到达Home,然后加载新的部分。 这一切都按预期工作。 但是我得到这个问题: 加载一个调用onResume()的setHasOptionsMenu(true) 加载另一个部分(老的部分,它被放置在堆栈之外)。 我明白了。 没有菜单显示 离开应用程序(例如,去Android Laucher活动),然后当我回来时,我看到正确的部分,但它显示旧的片段的菜单。 我已经迭代了后台并打印每个片段,而不是菜单的片段。 我在onResume()方法( setHasOptionsMenu(true)被标记的地方)上放了一个debugging标记,它确实进入了这里,所以碎片仍然在某处。 我想知道如果我做错了什么,我怎么能解决它,thx 更新: 我正在使用此代码来加载新的片段 fm.beginTransaction() .add(container, sectionFragment.getFragment()) .addToBackStack(sectionFragment.getFragmentName()) .commit(); 而为了删除: private void clearStack(){ int count = fm.getBackStackEntryCount(); while(count > 1){ fm.popBackStack(); count–; } } 注1:我使用添加替代,因为我不想松散我的片段状态,当我从细节部分导航回来。 当我加载另一个不同的部分,然后我调用clearStackpopup堆栈高达1,然后加载新的片段。 最后,我调用executePendingTransactions()完成从事务中删除碎片。 注2:我看到它正在我的片段onDestroy()方法进入,所以它被认为是被销毁。 但是我不知道为什么在主要活动恢复时再次调用它。

Fragment和FragmentStatePagerAdapter中的ViewPager片段导致exception(具有完整的示例)

我有一个ViewPager简单的片段。 我正在使用最新的支持库v4 rev18! 如果我第一次显示子片段,一切正常,如果我回去再次显示,应用程序崩溃,但有以下例外: 我有一个完整的例子显示,当下面的exception发生时: java.lang.NullPointerException at android.support.v4.app.FragmentManagerImpl.getFragment(FragmentManager.java:569) at android.support.v4.app.FragmentStatePagerAdapter.restoreState(FragmentStatePagerAdapter.java:211) at android.support.v4.view.ViewPager.onRestoreInstanceState(ViewPager.java:1281) at android.view.View.dispatchRestoreInstanceState(View.java:12043) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2688) at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2694) at android.view.View.restoreHierarchyState(View.java:12021) at android.support.v4.app.Fragment.restoreViewState(Fragment.java:425) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:949) 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:1460) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:440) at android.os.Handler.handleCallback(Handler.java:615) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4800) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565) at dalvik.system.NativeStart.main(Native Method) 我可以以任何其他方式在子片段中使用ViewPager,但是如果我手动添加/删除子片段并在子片段中使用FragmentStatePagerAdapter,则无法工作。 下面的例子应该工作,但它不…我已经添加了一些解决了一些问题的代码,但它并没有解决所有问题… import […]

onViewCreated – 错误的地方,以取代片段?

如果用户没有数据,我将显示一个空的片段。 在那个空片段(在onViewCreated )我检查一个条件,有时想用另一个replace空的片段,所以我调用相应的活动,取代了片段的方法。 一些用户(目前只有三星,6.0.1,但我不知道这是否意味着什么)经历了我executePendingTransactions行的崩溃: IllegalStateException: Fatal Exception: java.lang.RuntimeException Unable to resume activity {….app.activities.MyActivity_}: java.lang.IllegalStateException: FragmentManager is already executing transactions 这是一个错误在6.0.1或是onViewCreated错误的地方做到这一点? 编辑 这是一个可能的解决scheme吗? if (addToBackStack) { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).addToBackStack(name).commitAllowingStateLoss(); getSupportFragmentManager().executePendingTransactions(); } else { getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, contentFragment, name).commitNow(); }