如何动态填充片段布局?

时间:2015-09-21 21:18:01

标签: android android-layout android-fragments android-fragmentactivity android-actionbar-tabs

我的班级有一个片段:

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();
}

片段布局已经通过这种方式进行了修改:

<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,我需要根据名称和编辑的值修改服务器上的某些值。

非常感谢你,拯救我的生命。

2 个答案:

答案 0 :(得分:2)

  

您可以轻松更新按钮上的片段UI或任何事件   喜欢在Activity中。你可以通过

获得任何观点
 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();
    }
}

答案 1 :(得分:0)

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