【问题标题】:Fragments inside a Fragment [duplicate]片段中的片段[重复]
【发布时间】:2012-03-23 19:13:46
【问题描述】:

是否有任何帮助、资源、示例或教程可用于将片段放入片段中?

我有两个使用操作栏导航选项卡的选项卡,它们本质上是片段。我想要做的是,在其中一个操作栏导航选项卡片段中放入一个 ListFragment 和一个 DialogFragment(以显示带有详细信息的视图)。

可能吗?请帮忙。谢谢

这是我到目前为止所做的:

  1. 按照 Android 关于在 Action Bar 上实现导航选项卡的文章并实现了两个选项卡操作栏,运行良好,我能够显示两种不同的布局。
  2. 在其中一个选项卡中,我想显示一个 Fragmented 视图,为此我创建了一个带有自定义 ArrayAdapter 和数据项、数据详细信息布局和类的 FragmentList 类。
  3. 我现在陷入了如何在选项卡中显示片段的问题上。以下是显示第一个选项卡内容的代码,如何修改它以正确初始化列表片段?

.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{

    View viewer = (View) inflater.inflate(R.layout.doodle_list, container,false);
    return viewer;
}

【问题讨论】:

  • 你能给我们一个你的代码示例吗?
  • 我实际上被困住了。我将在我的问题中描述我到目前为止所做的事情,并对其进行编辑。
  • 不,碎片中不能有碎片,坏事会发生,小狗会死
  • 哦,好吧 :) 这是最有帮助的@Blundell。我现在可以停止骚动了:D 谢谢

标签: android android-fragments android-actionbar


【解决方案1】:

是否有任何帮助、资源、示例或教程可用于将片段放入片段中?

不支持片段内的片段。

Android 4.2+ 支持 Fragment 内部的 Fragment,并通过 Android Support 包的 Fragment 向后移植。我仍然希望尽可能避免它。

我有两个使用操作栏导航选项卡的选项卡,它们本质上是片段。

您选择这样做。操作栏标签没有任何内容需要使用片段。

【讨论】:

  • 感谢您的回答,我实际上关注了developer.android.com/guide/topics/ui/actionbar.html#Tabs,他们说我必须使用片段。您能否指点我一些其他资源,在那里我可以学习如何不使用 Fragments 并且仍然能够做到这一点?谢谢
  • @kishu27:“他们说我必须在哪里使用 Fragments”——这不是一个好的文档,我将很快提交一份错误报告。 “你能指点我一些其他资源,在那里我可以学习如何不使用碎片并且仍然能够做到这一点吗?” -- 忽略传递给TabListener 回调方法的FragmentTransaction 并执行其他操作来更新您的UI。
  • @kishu27 从 API 17 4.2 Jelly Bean 开始,您可以执行嵌套片段。这是给 Android 开发者的 link 嵌套片段。
  • @CommonsWare 有很多关于嵌套片段的文章。即使在developer site
  • @CommonsWare 看看这个rootzwiki.com/topic/…
【解决方案2】:

我解决了这个问题。您可以使用支持库和 ViewPager。如果您不需要通过手势滑动,您可以禁用滑动。所以这里有一些代码来改进我的解决方案:

public class TestFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.frag, container, false);
    final ArrayList<Fragment> list = new ArrayList<Fragment>();

    list.add(new TrFrag());
    list.add(new TrFrag());
    list.add(new TrFrag());

    ViewPager pager = (ViewPager) v.findViewById(R.id.pager);
    pager.setAdapter(new FragmentPagerAdapter(getActivity().getSupportFragmentManager()) {
        @Override
        public Fragment getItem(int i) {
            return list.get(i);
        }

        @Override
        public int getCount() {
            return list.size();
        }
    });
    return v;
}

}

P.S.这是用于测试的丑陋代码,但它改进了它是可能的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2014-10-17
    • 2016-06-29
    • 2018-08-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多