【问题标题】:How to populate a fragment layout dynamically?如何动态填充片段布局?
【发布时间】:2015-09-21 21:18:01
【问题描述】:

我和他的班级有一个片段:

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会定期从服务器接收值,所以可以自动更新。

解释完之后,我怎样才能将这个线性布局和他的子视图动态添加到 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? - 我怎样才能强制片段视图加载新数据?

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

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

【问题讨论】:

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


    【解决方案1】:

    您可以在按钮单击或任何事件上轻松更新 Fragment 的 UI 就像在活动中一样。您可以通过

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

    【讨论】:

    • 修改后的问题,以您的回答为例。谢谢。你能帮我解决其他问题吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多