Articles of fragmentmanager

Android onBackStackChanged()未调用

我有一个Activity如下面的代码: public class AuthenticatedMainActivity extends Activity implements FragmentManager.OnBackStackChangedListener{ @Override protected void onCreate(Bundle savedInstanceState) { …………. FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().add(R.id.frame_container,fragment, “First”).addToBackStack(null).commit(); } private void switchFragment(Fragment fragment){ FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).addToBackStack(“Tag”).commit(); } @Override public void onBackStackChanged() { System.out.println(“====================================================changeeeeeeeeeeeeeeeeeeeeeeeeee”); } } 但是,在使用onBackStackChanged()方法成功替换片段之后,甚至永远不会调用onBackStackChanged()方法。

即使在添加addToBackStack和executePendingTransactions()之后,getBackStackEntryCount()也始终返回0

我有两个活动A和B.活动A有一个mapFragment,我将它添加到backstack。 当我从B回到Actvity A时,我希望片段显示的状态与我离开时相同。 但getFragmentManager()。getBackStackEntryCount()返回0。这是我的代码: MapFragment mMapFragment = MapFragment.newInstance(); FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); mMapFragment.getMapAsync(this); fragmentTransaction.replace(R.id.container, mMapFragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); getFragmentManager().executePendingTransactions(); 从活动B返回时,我知道getBackStackEntryCount()的数量: System.out.println(“Number of entries in backstack “+ getFragmentManager().getBackStackEntryCount()); 这显示我0。 提前致谢。

使用(Child)FragmentManager正确使用子子片段

如何正确使用碎片中的碎片? 我的(简化)用例如下,我有一个布局片段的活动,这个片段自己包含一个子片段…所有片段都手动添加到他们的父母… ———————————————————- – Activity – – – – – – ————————————— – – – Fragment – – – – – – – – —————– – – – – – SubFragment – – – – – – – – – – – – – – – – – —————– – – – ————————————— – – […]

点击片段后面的隐形布局:

我创建了几个片段,然后按以下方式添加第一个片段: mainFragment = (MainFragment) MainFragment.create(); getSupportFragmentManager().beginTransaction() .setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) .add(R.id.content, mainFragment, MAIN_FRAGMENT_TAG) .commit(); 第二个片段以这种方式添加: getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left, R.anim.slide_in_left, R.anim.slide_out_right) //.hide(mainFragment) .add(R.id.content,VenueFragment.create(vid), “Venue Fragment”) .addToBackStack(null) .commit(); setDrawerIndicatorEnabled(false); 现在你看到hide方法没有应用于这个事务,并且VenueFragment被打开了,这种情况下的问题是当VenueFragment打开时(并且它是一个全屏视图)按下这个片段的空部分会调用MainFragment可点击的视图。 我怎么能阻止这个? 如果我使用hide选项,那么它不会发生但是由于某种原因,用于移除MainFragment的animation正在上升并且这会产生奇怪的体验。

没有支持库的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" […]