动态添加多个相同布局、获取内容

最近要做个动态添加N个重复布局的功能、这种做法也是看了别的大神的博客、做下记录

 

动态添加多个相同布局、获取内容

 

动态添加多个相同布局、获取内容

外层布局文件

<LinearLayout
    android:id="@+id/layout_implement"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView
        style="@style/text_sp15"
        android:layout_gravity="center_vertical"
        android:paddingBottom="@dimen/qb_px_8"
        android:paddingLeft="@dimen/qb_px_15"
        android:paddingRight="@dimen/qb_px_15"
        android:paddingTop="@dimen/qb_px_8"
        android:text="PTR实施过程" />
    <View style="@style/line" />
    <LinearLayout
        android:id="@+id/layout_add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    </LinearLayout>
    <TextView
        android:id="@+id/tv_again"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="@dimen/qb_px_15"
        android:layout_marginTop="@dimen/qb_px_10"
        android:background="@drawable/btn_shape"
        android:paddingBottom="@dimen/qb_px_5"
        android:paddingLeft="@dimen/qb_px_15"
        android:paddingRight="@dimen/qb_px_15"
        android:paddingTop="@dimen/qb_px_5"
        android:text="添加"
        android:textColor="@color/white"
        android:textSize="@dimen/qb_px_15" />
    <Button
        android:id="@+id/btn_apply"
        style="@style/btn_login_style"
        android:text="提交" />

动态添加多个相同布局、获取内容

item 布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_position"
        style="@style/text_sp15"
        android:layout_gravity="center_vertical"
        android:paddingBottom="@dimen/qb_px_8"
        android:paddingLeft="@dimen/qb_px_15"
        android:paddingRight="@dimen/qb_px_15"
        android:paddingTop="@dimen/qb_px_8"
        android:text="序号:1" />

    <TextView
        style="@style/text_sp15"
        android:layout_gravity="center_vertical"
        android:paddingBottom="@dimen/qb_px_8"
        android:paddingLeft="@dimen/qb_px_15"
        android:paddingRight="@dimen/qb_px_15"
        android:paddingTop="@dimen/qb_px_8"
        android:text="任务或事项" />

    <EditText
        android:id="@+id/et_implement"
        style="@style/edit_text_style" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/qb_px_15">

        <TextView
            style="@style/text_sp15"
            android:text="责任人" />

        <TextView
            android:id="@+id/tv_people_duty"
            style="@style/text_sp15_right"
            android:drawablePadding="@dimen/qb_px_10"
            android:drawableRight="@mipmap/ic_back_down"
            android:hint="请选择责任人"
            android:paddingBottom="@dimen/qb_px_10"
            android:paddingRight="@dimen/qb_px_15"
            android:paddingTop="@dimen/qb_px_10" />

    </LinearLayout>

    <View style="@style/line" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="@dimen/qb_px_15">

        <TextView
            style="@style/text_sp15"
            android:text="计划时间" />

        <TextView
            android:id="@+id/tv_date_plan"
            style="@style/text_sp15_right"
            android:drawablePadding="@dimen/qb_px_10"
            android:drawableRight="@mipmap/shijian"
            android:hint="请选择计划时间"
            android:paddingBottom="@dimen/qb_px_10"
            android:paddingRight="@dimen/qb_px_15"
            android:paddingTop="@dimen/qb_px_10" />

    </LinearLayout>

    <View style="@style/line" />


</LinearLayout>

 

动态添加多个相同布局、获取内容

代码中:

//动态添加相同布局所需

private List<View> viewList = new ArrayList<>();

private List<ViewHolder> viewHolderList = new ArrayList<>();

private int mark = 0;

初始化第一次添加的布局:

/**
 * 动态添加我、执行的
 */
private void initFirstView() {
    View addView = LayoutInflater.from(ChangePointDetailPTRActivity.this).inflate(R.layout.item_add_change_ptr, null);
    addView.setId(mark);
    layoutAdd.addView(addView, mark);
    getViewInstance(addView, mark);
}
public class ViewHolder {
    private TextView tvPosition, tvPeopleDuty, tvDatePlan;
    private EditText etImplement;
}

private void getViewInstance(View addView, int mark) {
    ViewHolder viewHolder = new ViewHolder();
    viewHolder.tvPosition = (TextView) addView.findViewById(R.id.tv_position);
    viewHolder.etImplement = (EditText) addView.findViewById(R.id.et_implement);
    viewHolder.tvPeopleDuty = (TextView) addView.findViewById(R.id.tv_people_duty);
    viewHolder.tvDatePlan = (TextView) addView.findViewById(R.id.tv_date_plan);

    viewHolderList.add(viewHolder);
    viewList.add(addView);
    // 设置监听
    viewHolder.tvPeopleDuty.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

        }
    });

    viewHolder.tvDatePlan.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Utils.showDateTimePicker(ChangePointDetailPTRActivity.this, viewHolder.tvDatePlan, true);
        }
    });
    viewHolder.tvPosition.setText("序号:" + (mark + 1));
}

点击再次添加按钮:

/**
 * 添加布局
 */
private void addViewAgain() {
    mark++;
    Log.e("布局位置", mark + "");
    View addView = LayoutInflater.from(ChangePointDetailPTRActivity.this).inflate(R.layout.item_add_change_ptr, null);
    addView.setId(mark);
    layoutAdd.addView(addView, mark);
    getViewInstance(addView, mark);
}

获取动态布局输入的内容:

private List<String> listTask = new ArrayList<>();
private List<String> listPeopleDuty = new ArrayList<>();
private List<String> listDatePlan = new ArrayList<>();

private void saveListData() {
    for (int i = 0; i < layoutAdd.getChildCount(); i++) {
        ViewHolder vh = viewHolderList.get(i);
        listTask.add(vh.etImplement.getText().toString().trim());
        listPeopleDuty.add(vh.tvPeopleDuty.getText().toString().trim());
        listDatePlan.add(vh.tvDatePlan.getText().toString().trim());
    }

}

谢谢这个大神的博客:https://blog.****.net/S43565442/article/details/53007010