动态添加多个相同布局、获取内容
最近要做个动态添加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