我可以以编程方式在片段中添加布局吗?

时间:2017-12-15 02:06:46

标签: android android-fragments

在我的片段中,我有一个LinearLayout,我想填充TextViewsButtons

在我的onCreate

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_checkout, container, false);
    container = (LinearLayout) v.findViewById(R.id.myLayout);
    return v;
}

为什么我的容器变灰了?

我正在尝试这个:

for(int x = 0; x < 3; x++){
       TextView text = new TextView(getActivity());
       text.setText(x);
       container.addView(text);
}

但它只是退出。我可以在fragments吗?

中执行此操作

2 个答案:

答案 0 :(得分:1)

  • 您应该添加在代码中定义的TextView。就像text一样。 tvOrder可能存在于您的布局中。

  • 您的onCreteView方法应该返回View

你可以这样做。

修改

 <LinearLayout
    android:id="@+id/myLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <!--you should add item here-->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <LinearLayout
        android:id="@+id/my_sub_linear"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <!--you should not add item here, and you can programatically add layout in it ?-->
    </LinearLayout>

</LinearLayout>

并在您的代码中

private LinearLayout container,mySubLinearLayout;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.fragment_checkout, container, false);
    container = (LinearLayout) v.findViewById(R.id.myLayout);
    // add here 
    mySubLinearLayout = (LinearLayout) v.findViewById(R.id.my_sub_linear);
    return v;
}

这段代码

for(int x = 0; x < 3; x++){
    TextView text = new TextView(getActivity());
    text.setText(x + "");
    mySubLinearLayout.addView(text);
}

注意

如果要以编程方式添加布局,则应设置空布局。

您也可以删除代码中的所有视图。

答案 1 :(得分:0)

您必须更改以下代码,因为您在文本视图中设置了整数值。

for(int x = 0; x < 3; x++){
       TextView text = new TextView(getActivity());
       text.setText(String.valueOf(x));
       container.addView(text);
}