Android:你可以嵌套片段?

是否可以在另一个Fragment的布局中粘贴Fragment ? 有没有人试过这个?

最后! android 4.2更新默认支持嵌套片段,也兼容: 官方NestedFragments 。 更重要的是,在v4支持库的最新版本11中宣布了对嵌套片段的支持 !

不,片段目前不在层次结构中。 试图将一个片段embedded另一个可能导致问题,往往是微妙的。

编辑:从ACLv11开始,只有在dynamicreplace(...) ViewPagers时才需要。

是的你可以,但有一些方法是痛苦的,但我甚至embeddedFragmentViewPagers。

如果你embeddedXML,那么当布局膨胀时,你将没有问题。

如果您在另一个片段中dynamic地embedded片段,那么您将遇到问题! 虽然这是可能的。

通常涉及发布到一个处理程序,然后在当前的片段转换后执行,然后开始另一个,这样你可以很容易地embedded片段。 但这会导致其他问题,所以您必须小心如何实现这一点。

FoodTestFeast已经embeddedViewPagers被删除和dynamic添加。

我的基地FragmentViewPager – 持有查看传呼机(其中有FragmentPagerAdapter)的片段

我还没有看到任何使用此崩溃,但让我知道是否有其他人。

 /** * @project FoodFeast * @author chris.jenkins * @created Dec 28, 2011 */ package couk.jenxsolution.food.ui.fragments; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.viewpagerindicator.TabPageIndicator; import couk.jenxsolution.food.R; import couk.jenxsolution.food.app.FoodApplication; /** * @author chris.jenkins */ public class QuizPagerBaseFragment extends QuizBaseFragment { // Data private FragmentStatePagerAdapter mAdapter = null; // Views private int layoutRes; private View mRootView; private ViewPager mPager; private TabPageIndicator mIndicator; // Handlers private final Handler handler = new Handler(); private Runnable runPager; private boolean mCreated = false; /** * @see android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater, * android.view.ViewGroup, android.os.Bundle) */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) mRootView = inflater.inflate(layoutRes, container, false); mPager = (ViewPager) mRootView.findViewById(R.id.pager); mPager.setOffscreenPageLimit(2); mIndicator = (TabPageIndicator) mRootView.findViewById(R.id.indicator); mIndicator.setTypeface(FoodApplication.getInstance().getTFs().getTypeFaceBold()); return mRootView; } /** * @see android.support.v4.app.Fragment#onActivityCreated(android.os.Bundle) */ @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (runPager != null) handler.post(runPager); mCreated = true; } /** * @see android.support.v4.app.Fragment#onPause() */ @Override public void onPause() { super.onPause(); handler.removeCallbacks(runPager); } /** * Set the ViewPager adapter from this or from a subclass. * * @author chris.jenkins * @param adapter */ protected void setAdapter(FragmentStatePagerAdapter adapter) { mAdapter = adapter; // mAdapter.notifyDataSetChanged(); runPager = new Runnable() { @Override public void run() { mPager.setAdapter(mAdapter); mIndicator.setViewPager(mPager); // mAdapter.notifyDataSetChanged(); mIndicator.setVisibility(View.VISIBLE); } }; if (mCreated) { handler.post(runPager); } } /** * Has to be set before onCreateView * * @author chris.jenkins * @param layoutRes */ protected void setLayoutRes(int layoutRes) { this.layoutRes = layoutRes; } } 

仅供参考您的布局将需要看起来像这样(或类似): 注意指标=去!

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.viewpagerindicator.TabPageIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone"/> <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1" /> </LinearLayout> 

解决不可能使用嵌套片段的巧妙方法是同时使用v4和本地片段。 它工作(我用它在许多应用程序),在某些情况下,我们需要绕过这个限制。

显然,在活动中你可以使用getFragmentManager()或者getSupportFragmentManager()来区分这两组片段。

可能是不推荐使用它,但它解决了我很多情况。