如何动态填充片段布局?

How to populate a fragment layout dynamically?

我有他的片段 class:

public class FormatShortFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.bag_format_short, container, false);

        return rootView;
    }
}

这是他的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </LinearLayout>
</RelativeLayout>

此片段由 FragmentPageAdapter 显示。 当用户从服务器添加一个项目时布局将增长(项目的来源无关紧要),并且该项目将是一个水平线性布局,带有 textview 和 edittext (item_name, item_value) .这个值是可以修改的,所以必须是一个edittext,而且这个edittext会定期从服务器接收值,所以可以自动更新。

解释完之后,如何将这个linearLayouts 及其子视图动态添加到GUI 中?我应该什么时候更新界面?

非常感谢,任何帮助都很受欢迎,我真的迷失在这个主题上。

编辑修改:

我把代码修改成这样:

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

    View rootView = inflater.inflate(R.layout.bag_format_short, container, false);

    return rootView;
}
@Override
public void onResume() {
    super.onResume();
    LinearLayout parentLinear = (LinearLayout) getActivity().findViewById(R.id.short_container);
    for (int i = 1; i<10; i++ ){
        LinearLayout innerLinear = (LinearLayout) new LinearLayout(getActivity());
        TextView itemName = new TextView(getActivity());
        itemName.setText("Nombre");
        EditText itemValue = new EditText(getActivity());
        itemValue.setText("Valor");
        innerLinear.addView(itemName);
        innerLinear.addView(itemValue);
        parentLinear.addView(innerLinear);
    }
}

@Override
public void onStart() {
    super.onStart();
}

@Override
public void onStop() {
    super.onStop();
}

并且fragment布局已经修改成这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">

<LinearLayout
    android:id="@+id/short_container"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
</LinearLayout>
</RelativeLayout>

现在布局在每次迭代中都在增长。

在这一点上我还有一个问题,希望你能帮我解决这个问题。 - 如何生成具有重力或重量等属性的 LayouParams 对象? - 如何将数据从 MainActivity 传递到 Fragment? - 我如何强制 Fragment 视图加载新数据?

我还需要知道如何以编程方式将 clickListener 事件绑定到添加的 linearLayouts,我需要根据名称和编辑后的值修改服务器上的一些值。

非常感谢,你救了我的命。

如果您想动态地将子视图添加到布局,请查看 android 文档中的 RecyclerView。听起来像您要找的东西。

you Can easily Update UI of Fragment on Button click or any event just Like in Activity. You can get any view by

 getActivity().findViewById() 

看例子,它会帮助你理解:-

public class FragmentTab3 extends SherlockFragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragmenttab3, container, false);
        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }


    @Override
    public void onStart() {
        super.onStart();


    LinearLayout linear = (LinearLayout) getActivity().findViewById(R.id.linear);
        Button button = new Button(getActivity());
        button.setText("Click Me");
        linear.addView(button);
    }

    @Override
    public void onStop() {
        super.onStop();
    }
}