动态生成UI 数据列表项(处置数据上报)1
动态生成UI 数据列表项(处理数据上报)1
核心思路:ScrollView+LinearLayout
为什么不采用自定义Listview:
存在一些暂时未解决的问题,比较麻烦:
1.屏幕内容滚动时会调用ListView的Adapter的getView()重新产生View,这就要求及时保存EditText中的数据,不然会丢失,使用了Listener监听EditText的TextChange,但是发现Listener经常不被调用,跟踪发现在getView()中创建的Edittext和ListView中用来显示的EditText句柄不一样 。
2.再次就是当软键盘弹出后,焦点从当前输入的EditText丢失,移动了第一个EditText上,屏幕直接来个大滚屏。。。根本没法使用。
核心代码:
// 代码生成控件方法 private LinearLayout newView(String category, String format, int id) { LinearLayout linearLayout = new LinearLayout(this); linearLayout.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.setGravity(Gravity.CENTER); // 类别 TextView category_txt = new TextView(this);// 创建TextextViewiew // category_txt.setPadding(10, 0, 0, 0); category_txt.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1)); category_txt.setText(category); // 设置TextextViewiew显示的内容 // category_txt.setWidth(100); category_txt.setSingleLine(); category_txt.setTextSize(17); category_txt.setGravity(Gravity.CENTER); linearLayout.addView(category_txt);// 将textView添加到线性布局中 // 规格 TextView format_txt = new TextView(this);// 创建TextextViewiew // format_txt.setPadding(10, 0, 0, 0); format_txt.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1)); format_txt.setText(format); // 设置TextextViewiew显示的内容 format_txt.setTextSize(17); format_txt.setGravity(Gravity.CENTER); // format_txt.setWidth(50); linearLayout.addView(format_txt);// 将textView添加到线性布局中 // 价格 EditText price_editText = new EditText(this); // price_editText.setPadding(10, 0, 0, 0); price_editText.setLayoutParams(new LinearLayout.LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 1)); price_editText.setGravity(Gravity.LEFT); price_editText.setHeight(10); price_editText.setWidth(10); // price_editText.setWidth(80); price_editText.setSingleLine(); price_editText.setTextSize(17); // price_editText.setText(String.valueOf(id));// 设置测试价格数据 // price_editText.setInputType(0); linearLayout.addView(price_editText);// 将textView添加到线性布局中 return linearLayout; }
private LinearLayout newView(String category, String format, int id) { LinearLayout linearLayout = new LinearLayout(this); // linearLayout.setId(id); linearLayout.setLayoutParams(params_wrapcontent); linearLayout.setOrientation(LinearLayout.HORIZONTAL); linearLayout.setGravity(Gravity.CENTER); // 类别 TextView category_txt = new TextView(this);// 创建TextextViewiew category_txt.setPadding(10, 0, 0, 0); category_txt.setLayoutParams(params_wrapcontent); category_txt.setText(category); // 设置TextextViewiew显示的内容 category_txt.setWidth(100); category_txt.setSingleLine(); linearLayout.addView(category_txt);// 将textView添加到线性布局中 // 规格 TextView format_txt = new TextView(this);// 创建TextextViewiew format_txt.setPadding(10, 0, 0, 0); format_txt.setLayoutParams(params_wrapcontent); format_txt.setText(format); // 设置TextextViewiew显示的内容 format_txt.setWidth(50); linearLayout.addView(format_txt);// 将textView添加到线性布局中 // 价格 EditText price_editText = new EditText(this); price_editText.setId(id); price_editText.setPadding(10, 0, 0, 0); price_editText.setLayoutParams(params_wrapcontent); price_editText.setWidth(80); price_editText.setSingleLine(); price_editText.setText(String.valueOf(id)); // price_editText.setText("500ml"); // 设置TextextViewiew显示的内容 linearLayout.addView(price_editText);// 将textView添加到线性布局中 return linearLayout; }
通过InFlate方式:
// 代码生成控件方法 private LinearLayout newView(String category, String format, int id) { LayoutInflater inflater = LayoutInflater.from(ReportPrice.this);// 渲染器 LinearLayout view = (LinearLayout)inflater.inflate(R.layout.reportprice_item, null); TextView variety_text = (TextView) view.findViewById(R.id.variety_text); variety_text.setText(category); // 设置TextextViewiew显示的内容 TextView format_text = (TextView) view.findViewById(R.id.format_text); format_text.setText(format); EditText price_editText = (EditText) view.findViewById(R.id.price_et); price_editText.setText(String.valueOf(id)); }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_gravity="center" android:layout_height="wrap_content"> <TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/variety_text" android:textSize="17sp" android:gravity="center" android:layout_gravity="center" android:layout_weight="1" /> <TextView android:layout_height="fill_parent" android:id="@+id/format_text" android:layout_gravity="center" android:textSize="17sp" android:gravity="center" android:layout_weight="1" android:layout_width="fill_parent" /> <EditText android:layout_height="wrap_content" android:inputType="numberDecimal" android:background="@drawable/username_bg" android:layout_width="fill_parent" android:id="@+id/price_et" android:layout_gravity="center" android:textSize="15dp" android:maxWidth="50dp" android:maxLength="10" android:gravity="center" android:layout_weight="1" /> </LinearLayout>
// 通过设置ID获取EditText的值 // for (int i = 0; i < studentModels.size(); i++) { // EditText editText = (EditText) linearLayout // .findViewById(i); // Map<String, Object> map = new HashMap<String, // Object>(); // map.put("price", editText.getText().toString()); // price_list.add(map); // studentModels.get(i).setSgrade(editText.getText().toString()); // System.out.println(studentModels.get(i).getString()); // } // 通过getChildAt for (int i = 0; i < listLayouts.size(); i++) { LinearLayout llLayout = (LinearLayout) linearLayout .getChildAt(i); EditText editText = (EditText) llLayout .getChildAt(2); studentModels.get(i).setSgrade( editText.getText().toString()); System.out .println(studentModels.get(i).getString()); }