动态生成UI 数据列表项(处置数据上报)1

动态生成UI 数据列表项(处理数据上报)1


动态生成UI  数据列表项(处置数据上报)1

 

核心思路:ScrollView+LinearLayout


动态生成UI  数据列表项(处置数据上报)1
 为什么不采用自定义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());
						}