Android: Можете ли вы вложить fragmentы?

Можно ли вставить Fragment в макет другого Fragment ? Кто-нибудь пробовал это?

    В заключение! Обновление для Android 4.0 поставляется с поддержкой по умолчанию для вложенных fragmentов, также совместимых: Официальные NestedFragments . Более того, поддержка вложенных fragmentов объявлена ​​в последней 11-й версии библиотеки поддержки v4 !

    Нет, fragmentы в настоящее время НЕ находятся в иерархии. Попытка иметь один fragment, внедренный в другой, может привести к проблемам, часто тонким.

    Изменить: с ACLv11 это необходимо только при динамическом replace(...) ViewPagers .

    Да, вы можете, но есть определенные способы, которые являются болью, но у меня даже встроенные FragmentViewPagers.

    Если вы вставляете в XML, то когда макет раздувается, у вас не будет проблем.

    Если вы вставляете fragmentы динамически в другой fragment, тогда вы получите проблемы! Хотя это возможно.

    Обычно включает в себя отправку в обработчик, который затем выполняется после текущего перехода fragmentа, а затем запускает другой, таким образом вы можете легко вставлять fragmentы. Но это приводит к другим проблемам, поэтому вам нужно быть осторожным, как вы это реализуете.

    В FoodTestFeast встроены ViewPagers, которые удаляются и добавляются динамически.

    My Base 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; } } 

    FYI, ваш макет должен выглядеть так (или аналогичный): ПРИМЕЧАНИЕ. Индикатор = GONE!

          

    Разумным способом решения проблемы невозможности использования вложенных fragmentов является использование как v4, так и собственных fragmentов. Он работает (я использую его во многих приложениях), и в некоторых случаях это то, что нам нужно обойти этот предел.

    Очевидно, что в деятельности вы можете использовать getFragmentManager () или getSupportFragmentManager (), чтобы отличить две группы fragmentов.

    Вероятно, это устаревшее использование, но оно решает многие ситуации.

    Давайте будем гением компьютера.