【问题标题】:Android Activity with two fragments: How to tell the system which FrameLayout I want to add my Fragment into?带有两个片段的 Android Activity:如何告诉系统我要将片段添加到哪个 FrameLayout?
【发布时间】:2015-01-06 07:28:35
【问题描述】:

假设一个FragmentActivity 应该有两个不同的Fragments(并排,右边的宽度是左边的两倍),这将是动态添加的。

我们如何告诉系统哪个Fragment进入哪个FrameLayout

如果它是Activity 中的单个Fragment,我将简单地覆盖onCreateView(),它将接收容器FrameLayout 作为参数,我将返回Fragment 的膨胀布局。

但是现在我有两个FrameLayouts 和两个Fragments 要添加到它们中,我如何告诉系统Activity 中的哪个FrameLayout 我想将我的Fragment 添加到?

【问题讨论】:

  • 发布您的代码以及您面临什么问题?
  • @perfect 一些编程问题是在设计中,在决定某项任务将如何实现时,并非所有问题都是错误之类的。

标签: android android-fragments android-framelayout


【解决方案1】:

您可以在FragmentActivityonCreate(Bundle savedInstanceState) 方法中像这样执行两个FragmentTransaction

事务 1

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.framelayout1, new Fragment1());
ft.commit(); 

事务 2

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.framelayout2, new Fragment2());
ft.commit(); 

【讨论】:

  • Shivams 的回答更好。但是FragmentActivityGoogle docs 状态:When using this class as opposed to new platform's built-in fragment and loader support, you must use the getSupportFragmentManager() and getSupportLoaderManager() methods respectively to access those features.
  • 我正在关注一个代码示例,他们做了类似fragmentTransaction.add(android.R.id.content, searchResultsListFragment); 的事情,我能找到的对android.R.id.content 的唯一解释是“它提供了视图的根元素,而无需知道它的名称/类型/id”reference - 所以我认为add() 的第一个参数必须是Fragment 布局中的根元素。让我试试这个。
  • @Zarah 来自 Google 文档,add(int containerViewId, Fragment fragment) 第一个参数 (containerViewId) 具有以下描述:Optional identifier of the container this fragment is to be placed in. If 0, it will not be placed in a container.Google doc
  • 是的。你应该使用getSupportFragmentManager()getSupportLoaderManager() 方法
【解决方案2】:

这个怎么样? :

SampleFragment1 fragment_1 = new SampleFragment1();
SampleFragment2 fragment_2 = new SampleFragment2();

FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.frameLayout1, fragment_1);
transaction.add(R.id.frameLayout2, fragment_2);
transaction.commit();

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 1970-01-01
    • 2017-05-24
    • 2017-09-21
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多