动态向我的活动布局添加多个片段

9
我有一个没有子视图的线性布局。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >


</LinearLayout>

我希望根据需求动态地添加一个或两个片段到它中。我知道如何向其中添加一个片段,但是如何动态地向其中添加两个片段呢?我有两个片段,并且在每个片段中,我编写了以下代码:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        //return super.onCreateView(inflater, container, savedInstanceState);
        View v=inflater.inflate(R.layout.frag1, container, false);
        v.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

        return v; 
    }

我正在尝试使用以下代码进行添加,但第二个片段会覆盖在第一个片段之上。
FragmentTransaction ft=fm.beginTransaction();
        frag1 f=new frag1();
        frag2 ff=new frag2();


        ft.add(android.R.id.content, f);
        ft.add(android.R.id.content, ff);

        ft.commit();

请问您需要翻译的是什么内容呢?

1
+1 我也在寻找这个问题的答案... 这似乎是一个非常重要的问题,但我却无法找到答案 :/ - 在活动布局中动态添加两个片段 - 对我来说这似乎是相当标准的东西,但据我所知它没有被涵盖在任何地方。 - AgentKnopf
更新内容是,您不能将两个添加到android.R.id.content,而是要添加到一个布局,例如LinearLayout或任何其他带有以下ID的布局:如果id one是viewgroup的ID,则ft.add(R.id.one,f,"one");ft.add(R.id.one,ff,"two"); ft.commit(); 请尝试并更新。 - user2779311
谢谢你回复我 :)!实际上,我已经找到了一种在一个 Activity 中托管两个 Fragment 的方法。所需做的就是在布局中有两个容器 - 每个 Fragment 一个容器并在它们上面设置权重。就像:第一个容器占据空间的30%,第二个容器占据空间的70%。如果您需要更多详细信息,请让我知道。大部分设置都在布局文件中完成,所以您只需更改 Fragment 事务以将其添加到其目标容器的 ID 即可。 - AgentKnopf
那其实不是问题。如果你不确定你会添加一个片段还是两个片段,该怎么办?这将在运行时而不是编译时决定。在这种情况下,您无法提前创建两个布局管理器。 - user2779311
我认为这不是问题。如果您根据布局决定片段数量-->只需使用不同的布局文件。如果您随机决定要显示的片段数量,请添加最多需要的容器(例如,如果您最多要显示3个片段,则添加3个容器),不要设置它们的权重并使它们不可见(View.GONE),直到您实际需要它们。另一个选项是根据要显示的片段数量选择不同的活动。如果您需要更详细的解释,请告诉我。 - AgentKnopf
1个回答

0

这应该可以解决问题:

    FragmentTransaction ft=fm.beginTransaction();
    frag1 f=new frag1();
    frag2 ff=new frag2();
    LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

    ft.add(android.R.id.content, f).commit();
    FragmentTransaction ft=fm.beginTransaction(); // this line might be unnescessary
    ft.add(android.R.id.content, ff).commit();

我正在写的代码和这个一样,但是它不起作用。 - user2779311
如果您将主LinearLayout的LayoutParams设置为wrap_content,则应该可以正常工作。 - Dr. Ehsan Ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接