我想创build一个ViewPager(有三个项目),其中每个视图是另一个ViewPager(有两个项目)。 用户然后刷这样的项目: ViewPager1[0] ViewPager2[0] ViewPager1[0] ViewPager2[1] ViewPager1[1] ViewPager2[0] ViewPager1[1] ViewPager2[1] ViewPager1[2] ViewPager2[0] ViewPager1[2] ViewPager2[1] 这怎么可能?
我有一个包含ViewPager的片段。 ViewPager与包含一组片段的适配器相关联。 加载父片段后,遇到IllegalStateException ,消息: java.lang.IllegalStateException: Recursive entry to executePendingTransactions 。 一些研究使我得出这样一个结论:系统无法在另一个片段中显示片段,但是似乎有一些迹象表明,使用ViewPager(ViewPager中的一个bug使用它与其他片段 )。 事实上,如果我按下的button添加到我的父代片段,当我的ViewPager按下时调用mPager.setAdapter(mAdapter) ,ViewPager成功加载。 这并不理想。 这个问题必然与片段生命周期有关。 因此,我的问题是:有没有人find解决这个问题的办法,如果是的话,怎么办? 有没有办法延迟ViewPager上的适配器的设置,直到片段事务之后? 这是我的父母片段代码: @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mView = inflater.inflate(R.layout.team_card_master, container, false); mViewPager = (ViewPager)mView.findViewById(R.id.team_card_master_view_pager); final Button button = (Button)mView.findViewById(R.id.load_viewpager_button); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mViewPager.setAdapter(mAdapter); button.setVisibility(View.GONE); } }); […]
这里是场景:活动包含片段A ,它依次使用getChildFragmentManager()在其onCreate添加片段A1和A2 ,如下所示: 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() 在转换过程中,片段B的enteranimation正确运行,但片段A1和A2完全消失 。 当我们用Backbutton恢复事务时,它们在popEnteranimation期间正确初始化并正常显示。 在我的简短testing中,它得到了更多的 – 如果我设置了子片段的animation(见下文),当我们添加片段B时, exitanimation间歇运行 getChildFragmentManager() .beginTransaction() .setCustomAnimations(enter, exit) .replace(R.id.fragmentOneHolder, new FragmentA1()) .replace(R.id.fragmentTwoHolder, new FragmentA2()) .commit() 我想实现的效果很简单 – 我想要片段A (anim2)上的exit (或者应该是popExit ?)animation来运行整个容器,包括其嵌套的子项。 有什么办法可以实现吗? 编辑 :请在这里find一个testing用例 编辑2 :感谢@StevenByle推动我继续尝试与静态animation。 显然你可以在每个操作的基础上设置animation(对整个事务不是全局的),这意味着孩子可以有一个无限的静态animation集,而他们的父母可以有不同的animation,整个事情可以在一个事务中提交。 […]
在Android 4.2中,支持库得到了对嵌套片段的支持。 我玩过它,并发现一个有趣的行为/关于返回堆栈和getChildFragmentManager()的错误 。 当使用getChildFragmentManager()和addToBackStack(String name)时,通过按下后退button,系统不会将后退堆栈运行到前一个片段。 另一方面,当使用getFragmentManager()和addToBackStack(String name)时,通过按下后退button,系统返回到前一个片段。 对我而言,这种行为是意想不到的。 通过按下设备上的后退button,我期望即使片段被添加到孩子的片段pipe理器中的后退堆栈中,最后添加的片段也将被popup。 这种行为是正确的吗? 这种行为是一个错误? 有没有解决这个问题的方法? 带有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); […]
我有一个片段界面,底部有标签,在主视图中打开不同的片段。 我有一个特定的片段,这是一个项目列表。 如果用户select这个列表中的一个项目,则打开另一个片段,其包含在前一个片段中的列表中的所有项目之间水平滚动的viewpager。 这很好。 viewpager使用FragmentPagerAdapter来显示项目。 当用户select列表中的项目,查看它,然后点击标签栏上的button返回到列表,然后select另一个项目时,问题出现了。 第二次select一个项目时,会出现一个空白屏幕而不是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(); } @Override […]
我一直在使用支持库中包含的新的嵌套的片段 API。 我面临的嵌套片段的问题是,如果嵌套片段(即,已经通过由getChildFragmentManager()返回的FragmentManager添加到另一个片段的FragmentManager )调用startActivityForResult() ,则嵌套片段的onActivityResult()方法不叫。 但是,父级片段的onActivityResult()和activity的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 […]
我正在写一个4.0和4.1平板电脑的应用程序, 我不想使用支持库 (如果不需要),但只有4.x的API。 所以我的目标平台定义为:> = 4.0和<= 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或更高版本上实现嵌套片段devise。 注意:当布局包含<fragment>时,不能将布局充气到<fragment> 。 只有在dynamic添加到片段时才支持嵌套片段。 因为我把定义在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_ […]
是否可以在另一个Fragment的布局中粘贴Fragment ? 有没有人试过这个?
我有一个ViewPager与三个Fragments ,每个显示一个List (或Grid )。 在新的Android API level 17 (Jelly Bean 4.2)中,其中一个特性是嵌套片段 。 新的function描述说: 如果您使用ViewPager创build左右滑动并占用大部分屏幕空间的片段,则现在可以将片段插入到每个片段页面中。 所以,如果我理解正确的话,现在我可以在里面创build一个带Fragments的ViewPager (例如里面有一个button),当用户按下button显示另一个Fragment不会松动ViewPager使用这个新function。 我已经花了我的早晨试图实现这几种不同的方式,但我不能让它工作…有人可以添加一个简单的例子来说明如何实现这个? PS:我只对这样做有兴趣,用getChildFragmentManager来学习如何工作。
我需要关于片段内碎片的帮助,实际上我在按下button时遇到问题。 应用程序主屏幕上有button,按下每个button视图replace为新的片段(该片段包含在另一个片段内),dynamic添加/replace片段工作正常,按下button1片段replace,同样按下button时,但如果我按button再次,得到一个exception: "Duplicate id 0x7f05000a, tag null, or parent id 0x7f050009 with another fragment for com…….. fragmentname" 意思是已经添加了片段或内部片段,我试图再次添加它们,任何人都知道如何使用片段内部的片段并且没有任何问题来回移动,感谢支持。 MainActivity,其中片段是dynamic添加和replace的。 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) { super.onCreate(savedInstanceState); setContentView(R.layout.main); button1 […]