Articles of fragmenttransaction

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

我创建了几个片段,然后按以下方式添加第一个片段: 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正在上升并且这会产生奇怪的体验。

已经调用了Android FragmentTransaction提交

我的错误: java.lang.IllegalStateException:已经调用了commit 我的代码: final FragmentTransaction fragmentTransaction =getFragmentManager().beginTransaction(); f1_fragment = new F1_Fragments(); f2_fragment = new F2_Fragments(); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { parent.getItemAtPosition(position); if(position==0){ fragmentTransaction.replace(android.R.id.content, f1_fragment); }else{ fragmentTransaction.replace(android.R.id.content, f2_fragment); } fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } });

何时使用FragmentTransaction的attach和detach方法

我刚刚浏览了FragmentTransaction的attach()和detach()方法的文档: attach() :在先前使用detach(Fragment)从UI detach(Fragment)之后重新附加片段。 这会导致其视图层次结构被重新创建,附加到UI并显示。 嗯,这是什么意思? 更具体地说,我看到了一个例子: mMapFragment = new MapFragment(); ft.beginTransaction(mMapFragment) .attach() .add(R.id.container, mMapFragment) .commit(); 我删除了attach()并再次尝试:我没有发现任何差异。 attach在这个例子中做了什么? 与此相比有什么不同: ft.beginTransaction() .add(R.id.container, mMapFragment) .commit(); 如果上面的例子不足以显示差异……我只想知道我们何时需要显式调用attach()和detach() ? 如果你可以解释添加/删除/替换方面的差异会更好。

AppCompat操作栏库不显示添加的片段

编辑 :如果我扩展FragmentActivity而不是ActionBarActivity我的布局再次出现(当然没有一个ActionBar )。 ActionBar在4.x设备上按预期工作,但在我的2.3设备上,我所得到的是ActionBar和它下面的空白屏幕 。 Fragment似乎没有被添加到Activity 。 的themes.xml <style name="AppTheme" parent="AppBaseTheme"> <item name="actionBarStyle">@style/Widget.ActionBar</item> </style> 主题-v11.xml <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarStyle">@style/Widget.ActionBar</item> </style> styles.xml <style name="Widget.ActionBar" parent="@style/Widget.AppCompat.ActionBar"> <item name="android:background">@color/actionbar_background</item> <item name="background">@color/actionbar_background</item> </style> Activity onCreate() FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); myFragment = new WallFragment(); fragmentTransaction.add(android.R.id.content, myFragment, myFragment.FRAGMENT_TAG); fragmentTransaction.commit(); 我正在使用Gradle将AppCompat ActionBar库包含在我的应用程序中。 compile 'com.android.support:appcompat-v7:18.0.+'

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

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

Android的片段与animation交易导致白色闪光

我有两个片段。 片段A最初是在视野中。 当用户按下button时,使用下面的方法将片段Banimation化为视图。 当我popup片段B时,它将animation从视图中移出,但是当它完成时,屏幕将闪烁白色。 不知道是什么原因造成的,似乎只发生在kit-kat而不是棒棒糖上。 正在使用的animation是向上滑动和下滑在xml中定义的animation。 @Override public void loadFragment(BaseFragment fragment, boolean replace, boolean addToBackStack, int animIn, int animOut, int animPopIn, int animPopout) { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (animIn != -1 && animOut != -1 && animPopIn != -1 && animPopout != -1) { transaction = transaction.setCustomAnimations(animIn, animOut, animPopIn, animOut); } else if (animIn […]

当通过导航抽屉replace之前的片段到新的片段时,在新的片段中排除前面的片段响应

我有导航drawar共有12个片段..每个片段都有抽排方法。 除了位置= 1和位置= 5片段之外,每个片段都显示自己的齐射响应。 当我的应用程序启动 情况1:我打开位置1片段,打开位置5片段后,两个片段都有位置1片段响应。 情况2:如果我打开位置5的片段,打开后的位置1片段比两个片段都有位置1的片段响应。 情景1图像: 情景2图像: 我的片段交易方法类: private void showFragment(Fragment fragment) { llContainer = (LinearLayout)findViewById(R.id.container); if (fragment != null) { llContainer.removeAllViewsInLayout(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.container, fragment, fragment.getClass().getName()); fragmentTransaction.commit(); fragmentManager.popBackStack(); } } @Override public void onItemSelected(int position) { Fragment frag = null; switch (position) { case POS_HOME: frag […]

FragmentTransaction:replace和addToBackStack不能一起工作?

我对Android开发相当陌生,现在运行起来怪异的行为。 我有一个空的FrameLayout是一个片段的容器。 如果用户第一次按下button,生成新的碎片并放入容器中。 如果用户稍后按下一个button,并且容器内存在片段,则用新生成的片段replace现有片段。 如果用户按回button,popup容器内的片段。 这是我的代码 public void showFragment(View v) { FragmentA f = new FragmentA(); FragmentManager fm = getSupportFragmentManager(); String tag = f.getFragmentTag(); // instance method of a to get a tag FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_in_top, 0, 0, R.anim.slide_out_top); ft.replace(R.id.container, f, tag); ft.addToBackStack(tag); ft.commit(); } @Override public void onBackPressed() { FragmentManager fm = […]

退出animation不起作用; FragmentTransaction自定义animation不适用于隐藏

我使用show / hide来显示占据屏幕一部分的片段。 出于某种原因,当显示片段时,会播放slide_in_leftanimation,但是当片段被隐藏时没有animation,片段就会消失。 我已经尝试使用slide_in_leftanimationexit和enter ,这没有帮助。 当把代码追踪到支持包中时,animation就会被创build,并且显示它的代码正在被执行。 (我跟踪了.hide电话) FragmentManager fm = _activity.getSupportFragmentManager(); Fragment fragment = fm.findFragmentById(R.id.my_fragment); FragmentTransaction ft = fm.beginTransaction(); ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left); if (fragment.isHidden()) { ft.show(fragment); fragment.setUserVisibleHint(true); } else { ft.hide(fragment); } ft.commit(); 以防万一这里是slide_out_leftanimation的xml <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="0" android:toXDelta="-50%p" android:duration="@android:integer/config_mediumAnimTime"/> <alpha android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="@android:integer/config_mediumAnimTime" /> </set> 编辑:这个问题可能与my_fragment与另一个包含webview的片段共享屏幕宽度有关。 当为my_fragment执行.show时,它变得可见并且在水平线性布局内共享空间(两个片段中每一个所占的屏幕宽度由weight参数确定)。

FragmentTransaction没有做任何事情

我正在学习片段,下面给出的是我的第一个片段程序。 一个简单的项目,我有2个屏幕。 当我点击第一个屏幕的下一个button时,需要显示第二个button。 我的目标是Android 2.1及以上,并使用兼容性包 AppMainFragmentActivity.java public class AppMainFragmentActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setContentView(R.layout.app_main_layout); } } app_main_layout.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:id="@+id/fragment_container"> <fragment class="com.research.fragmentstudy.FirstFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/id_first_fragment"/> </LinearLayout> FirstFragment.java public class FirstFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { […]