Questions tagged «android-nested-fragment»

6
片段中的片段
我想知道这是否真的是Android API中的错误: 我有这样的设置: ┌----┬---------┐ | | | | 1 | 2 | | |┌-------┐| | || || | || 3 || └----┴┴-------┴┘ 是在右窗格中加载片段2(搜索屏幕)的菜单。 是一个搜索屏幕,其中包含片段#3,这是结果列表。 结果列表已在多个地方使用(本身就是一个功能完善的高级片段)。 此功能在手机上(在1&2和3是ActivityFragments的情况下)效果很好。 但是,当我使用此代码时: FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); Fragment frag = new FragmentNumber2(); if(toLoad != null) frag.setArguments(toLoad); transaction.replace(R.id.rightPane, frag); transaction.commit(); 其中R.id.leftPane和R.id.rightPane是<fragment>水平线性布局中的。 据我了解,以上代码删除了驻留的片段,然后将其替换为新的片段。太棒了……显然,这不会发生,因为当此代码第二次运行时,您会收到以下异常: 07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: …

13
片段内部片段
我需要有关片段内部片段的帮助,实际上我在按“后退”按钮时遇到问题。应用程序主屏幕上有按钮,并在每个按钮视图上按,然后用新片段替换(该片段包含在另一个片段内),通过按button1替换片段,动态添加/替换片段的工作正常,但按按钮时也会发生同样的情况,但是如果按该按钮再次出现异常: "Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for com........ fragmentname" 表示已经添加了片段或内部片段,而我正尝试再次添加它们,任何人都知道如何使用片段内部的片段并可以毫无问题地来回移动,谢谢您的支持。 MainActivity,动态添加和替换片段。 public class FragmentInsideFragmentTestActivity extends Activity { private Button button1; private Button button2; private Button button3; private Button button4; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) …

5
不使用支持库的Android 4.0、4.1(<4.2)中嵌套片段的最佳实践
我正在编写适用于4.0和4.1平板电脑的应用程序,我不希望使用其支持库(如果不需要),而仅使用4.x api。 因此,我的目标平台定义为:&gt; = 4.0和&lt;= 4.1 该应用程序具有多窗格布局(两个片段,一个小片段在左侧,一个内容片段在右侧)和一个带有选项卡的操作栏。 与此类似: 单击操作栏上的选项卡将更改“外部”片段,然后,内部片段是具有两个嵌套片段的片段(1.左列表小片段,2.内容广泛的片段)。 我现在想知道替换片段(尤其是嵌套片段)的最佳实践是什么。ViewPager是支持库的一部分,此类没有本地4.x替代品。在我看来,似乎已被“弃用”。- http://developer.android.com/reference/android/support/v4/view/ViewPager.html 然后,我阅读了有关Android 4.2的发行说明ChildFragmentManager,这很适合,但我的目标是4.0和4.1,因此也无法使用。 ChildFragmentManager 仅在4.2中可用 http://developer.android.com/about/versions/android-4.2.html#NestedFragments http://developer.android.com/reference/android/app/Fragment.html#getChildFragmentManager() 不幸的是,即使没有整个Android开发人员指南,也几乎没有很好的示例显示没有支持库的片段用法的最佳实践。特别是关于嵌套片段的内容。 所以我想知道:如果不使用支持库及其附带的所有内容,是否无法简单地编写带有嵌套片段的4.1应用程序?(需要使用FragmentActivity而不是Fragment等吗?) 或者最佳实践是什么? 我目前在开发中遇到的问题正是此语句: http://developer.android.com/about/versions/android-4.2.html#NestedFragments Android支持库现在还支持嵌套片段,因此您可以在Android 1.6及更高版本上实现嵌套片段设计。 注意:如果版式包含,则不能将其膨胀为片段&lt;fragment&gt;。仅当动态将片段添加到片段时,才支持嵌套片段。 因为我用XML定义了嵌套的片段,所以显然会引起如下错误: Caused by: java.lang.IllegalArgumentException: Binary XML file line #15: Duplicate id 0x7f090009, tag frgCustomerList, or parent id 0x7f090008 with another fragment for de.xyz.is.android.fragment.CustomerListFragment_ 此刻,我为自己总结:即使在4.1上,甚至当我不想针对2.x平台时,如无屏幕截图所示的嵌套片段,都没有支持库是不可能的。 (这实际上可能更多的是维基条目而不是问题,但也许以前有人管理过它)。 …

13
将选项卡与ViewPager一起使用时出现错误“ Java.lang.IllegalStateException活动已被破坏”
我有一个应用程序,其中包含在选项卡模式下使用ActionBarSherlock的应用程序。我有5个选项卡,每个选项卡的内容都是使用片段处理的。但是对于tab2,我有一个片段,该片段的xml文件包含一个ViewPager元素,而该元素又具有一些片段页面。最初启动应用程序时,我可以在选项卡之间进行切换,但是第二次按tab2时,出现上述错误。主要活动如下: public class MainActivity extends SherlockFragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ActionBar actionBar = getSupportActionBar(); ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); ActionBar.Tab tab4 = actionBar.newTab().setText("Tab4"); ActionBar.Tab tab5 = actionBar.newTab().setText("Tab5"); Fragment fragment1 = new Tab1(); Fragment fragment3 = new Tab3(); Fragment …

17
Android 4.2:具有嵌套片段的后堆栈行为
在Android 4.2中,支持库获得了对嵌套片段的支持,请参见此处。我玩过它,发现了一个关于back stack和getChildFragmentManager()的有趣行为/错误。当使用getChildFragmentManager()和addToBackStack(String name)时,通过按“后退”按钮,系统不会将后退堆栈运行到上一个片段。另一方面,当使用getFragmentManager()和addToBackStack(String name)时,通过按返回按钮,系统将返回到上一个片段。 对我来说,这种行为是意外的。通过按设备上的“后退”按钮,我希望最后一个添加到后堆栈的片段都会弹出,即使该片段是在儿童片段管理器中添加到后堆栈的。 这种行为正确吗?这是一个错误吗?有没有解决此问题的方法? getChildFragmentManager()的示例代码: public class FragmentceptionActivity extends FragmentActivity { @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); final FrameLayout wrapper1 = new FrameLayout(this); wrapper1.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT)); wrapper1.setId(1); final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT); params.topMargin = 0; final TextView text = new TextView(this); text.setLayoutParams(params); …

16
嵌套片段在过渡动画期间消失
这里的情景:活动包含片段A,又使用getChildFragmentManager()添加片段A1,并A2在其onCreate像这样: getChildFragmentManager() .beginTransaction() .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 到目前为止,一切都很好,一切正常。 然后,我们在Activity中运行以下事务: getSupportFragmentManager() .beginTransaction() .setCustomAnimations(anim1, anim2, anim1, anim2) .replace(R.id.fragmentHolder, new FragmentB()) .addToBackStack(null) .commit() 在过渡期间,enter片段的动画B正确运行,但片段A1和A2完全消失。当我们使用“后退”按钮还原事务时,它们会正确初始化并在popEnter动画过程中正常显示。 在我的简短测试中,它变得很奇怪-如果我为子片段设置动画(请参见下文),则exit在添加片段时动画会间歇性地运行B getChildFragmentManager() .beginTransaction() .setCustomAnimations(enter, exit) .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 我要实现的效果很简单-我想运行片段(anim2)上的exit(或应该是popExit?)动画,A从而对整个容器(包括其嵌套的子代)进行动画处理。 有什么方法可以实现? 编辑:请在这里找到一个测试用例 Edit2:感谢@StevenByle促使我继续尝试使用静态动画。显然,您可以基于每个操作设置动画(不是整个事务的全局动画),这意味着子级可以具有不确定的静态动画集,而其父级可以具有不同的动画,并且整个事情可以在一个事务中完成。请参阅下面的讨论和更新的测试用例项目。

13
使用FragmentPagerAdapter的ViewPager中的片段在第二次查看时为空白
我有一个片段界面,其底部带有选项卡,可在主视图中打开不同的片段。 我有一个特定的片段,它是项目列表。如果用户选择此列表中的一个项目,则会打开另一个片段,其中包含一个viewpager,该viewpager会在上一个片段的列表中的所有项目之间水平滚动。这很好。 viewpager使用FragmentPagerAdapter来显示项目。 当用户在列表中选择一个项目,查看它,然后单击选项卡栏上的按钮以返回到列表,然后选择另一个项目时,就会出现问题。第二次选择项目时,出现空白屏幕,而不是viewpager。发生这种情况时,我在LogCat中没有收到任何错误。 为什么viewpager只第一次出现? FragmentPagerAdapter: public class ViewPagerAdapter extends FragmentPagerAdapter { Cursor mCursor; public ViewPagerAdapter(FragmentManager fm, Cursor c) { super(fm); mCursor = c; } public void changeCursor(Cursor c) { mCursor = c; this.notifyDataSetChanged(); } @Override public int getCount() { if (mCursor == null) return 0; else return mCursor.getCount(); } …

7
在新的嵌套片段API中未调用onActivityResult()
我一直在使用Android支持库中包含的新的嵌套片段API。 嵌套片段所面临的问题是,如果调用了一个嵌套片段(即,已通过的FragmentManagerreturn由添加到另一个片段的片段getChildFragmentManager())startActivityForResult(),onActivityResult()则不会调用该嵌套片段的方法。但是,父片段onActivityResult()和活动onActivityResult()都被调用。 我不知道是否缺少有关嵌套片段的信息,但是我没有想到所描述的行为。下面是重现此问题的代码。如果有人能指出正确的方向并向我解释我做错了什么,我将不胜感激: package com.example.nestedfragmentactivityresult; import android.media.RingtoneManager; import android.os.Bundle; import android.content.Intent; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.Toast; public class MainActivity extends FragmentActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.getSupportFragmentManager() .beginTransaction() .add(android.R.id.content, new ContainerFragment()) .commit(); } public void onActivityResult(int requestCode, int resultCode, …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.