核心思路: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());
}