android - 如何动态填充 fragment 布局?

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

我有一个关于他的类(class)的 fragment :

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>

该 fragment 由 FragmentPageAdapter 显示。 当用户从服务器添加项目(项目的来源无关紧要)时,布局将会增长,并且该项目将是水平线性布局,具有 TextView 和编辑文本(项目名称,项目值)。这个值是可以修改的,所以必须是一个edittext,而且这个edittext会定期从服务器接收值,所以可以自动更新。

解释完之后,如何动态地将这个 LinearLayouts 及其 subview 添加到 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 View 重新加载新数据?

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

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

最佳答案

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

关于android - 如何动态填充 fragment 布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32704729/

相关文章:

java - 还有其他方法可以加载吗?

java - 直接从网络流(http)播放媒体(视频)

android - OpenCv 与 Android studio 2.2+ 使用带有 cmake 的新 gradle - 未定义引用

android - 向 ImageView 和 Drop-Shadow 添加框架或边框

java - 我一直在尝试在 map 下面获取底部表格,但收到错误,我不知道它来自哪里

android - 在 Android 上构建兼容性 PreferenceFragment

java - Executor 和 PriorityBlockingQueue 上的 ASyncTask

android - 如何在 Android 应用程序中为整个屏幕添加边框?

用于大/小字体的 Android 资源限定符(可访问性)

java - ViewPager、FragmentStatePagerAdapter、ListFragment单独列出每个Fragment的数据