`

动态生成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());
						}

 

  • 大小: 19.8 KB
  • 大小: 19.2 KB
分享到:
评论

相关推荐

    基于Vue的JSON可视化编辑器通过定义JSONSchema直接生成UI界面

    5. **处理数据**:在组件内部,你需要处理JSON数据的增删改查,并同步到UI上。 6. **样式定制**:根据需求,可以使用CSS预处理器(如Sass或Less)对生成的UI进行样式定制。 7. **交互逻辑**:添加事件监听器以响应...

    qt多线程实例-数据处理和UI界面显示

    在Qt框架中,多线程技术是实现高效并发处理的关键,尤其在数据处理和用户界面(UI)更新方面。这个实例“qt多线程实例-数据处理和UI界面显示”很可能是为了展示如何在不阻塞UI的情况下进行繁重的数据处理任务。 在...

    Vue+Element实现动态生成新表单并添加验证功能

    在Vue.js框架中与Element UI组件库结合实现动态表单生成以及表单验证是一个相当实用的技术应用场景。本文主要阐述了如何使用Vue.js和Element UI来实现表单的动态生成,并为这些动态生成的表单添加了验证功能。 知识...

    使用easyui表格数据动态生成饼图

    "使用easyui表格数据动态生成饼图"的主题涉及到前端开发中的几个关键点:EasyUI框架、数据处理以及JavaScript图表库ECharts。下面我们将深入探讨这些知识点。 首先,EasyUI是一个基于jQuery的UI库,它提供了一系列...

    从数据库中读出数据动态生成菜单栏

    前端接收到数据后,可以使用模板引擎(如EJS、Handlebars)或组件库(如Element UI、Ant Design)的列表渲染功能,动态生成菜单HTML。 此外,考虑到性能和用户体验,通常会采用缓存策略来提高菜单加载速度。例如,...

    根据表中数据动态生成菜单

    在IT行业中,动态生成菜单是一项常见的需求,尤其是在开发Web应用或者桌面软件时。这个实例——"根据表中数据动态生成菜单",旨在教你如何利用数据库中的信息来构建灵活且可扩展的菜单系统。动态生成菜单的优势在于...

    ligerui+Json_使用LigerUI的Grid和Java的Json实现数据显示

    LigerUI是一款强大的JavaScript ...总的来说,LigerUI的Grid组件结合Java的JSON数据处理,能高效地展示和管理后台数据,提供用户友好的交互体验。在项目中灵活运用这些技术,能够极大地提升前端应用的性能和用户体验。

    wpf动态生成界面

    在动态生成界面的场景下,开发者可能需要在`MainWindow.xaml.cs`或`Window1.xaml.cs`中编写代码,根据需要动态创建并添加UI元素,同时利用事件绑定和数据绑定来实现交互逻辑。 总结来说,WPF动态生成界面的关键在于...

    jquery easy ui edatagrid 动态编辑表格 例子

    JSON格式的数据结构一般包括字段名和对应的值,使得表格能够正确显示和处理数据。 `editable.jsp`文件可能是一个Java服务器页面,它负责处理与`edatagrid`交互的服务器端逻辑。例如,接收用户的添加、编辑或删除...

    数据字典生成工具源码 (c#)

    数据字典是系统设计阶段的关键组成部分,它记录了系统中所有数据的详细信息,包括数据项、数据结构、数据流、数据存储和处理过程。数据字典的作用在于提供清晰的数据描述,帮助开发者理解系统中的数据流动和处理方式...

    Unity UGUI动态生成N个Item自动排列

    Unity UGUI动态生成N个Item自动排列是Unity...总的来说,Unity UGUI动态生成N个Item自动排列涉及到了UI设计、数据处理、性能优化等多个方面,通过合理运用Unity提供的工具和技巧,可以构建出高效、易维护的用户界面。

    WPF页面动态生成.7z

    4. **ItemsControl**:`ItemsControl` 是一个非常有用的类,它可以动态显示一个集合中的所有项,配合`ItemTemplate`可以实现动态控件列表。 ### 示例代码 ```csharp // 动态创建Button Button myButton = new ...

    vue+element-ui实现穿梭框数据自定义排序

    // 这里可以根据实际需求处理数据的增删 // ... // 对右侧列表进行排序 this.sourceData.sort((a, b) =&gt; { if (a.name &gt; b.name) { return 1; } if (a.name ) { return -1; } return 0; // 当名字相同时...

    vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信

    在介绍Vue Element-UI Table组件的动态生成表头和数据、修改单元格格式以及父子组件通信的过程中,涉及到了Vue框架的诸多核心知识点。以下将详细解释这些知识点。 首先,Vue是一种构建用户界面的渐进式框架。它的...

    SwiftUI之如何处理特定的数据和如何在视图中适配数据模型对象.zip

    在SwiftUI中,我们经常需要标识特定的数据项,这可能涉及到在列表或集合中高亮显示某个元素。这可以通过使用`@State`或`@Binding`属性包装器实现,它们允许你在视图之间传递和管理数据。例如,你可以创建一个变量来...

    动态生成波形图,串口接收数据波形图

    在IT领域,动态生成波形图是一项常见的任务,特别是在数据分析、信号处理以及嵌入式系统监控等场景。这里,我们主要关注的是如何通过程序来实现这个功能,以及如何结合串口接收数据来实时更新波形图。让我们深入探讨...

    动态生成布局带点击事件

    在Android开发中,动态生成布局是一项常见的需求,特别是在创建复杂且可自定义的用户界面时。动态布局生成允许开发者在程序运行时根据需要创建、修改或删除视图元素,而不是在XML布局文件中预先静态定义。这样的灵活...

    vue+element-ui动态生成多级表头的方法

    标题中的“vue+element-ui动态生成多级表头的方法”是指在Vue.js应用程序中使用Element-UI库来创建一个能够根据数据动态展示多级表头的表格组件。Element-UI是一个流行的前端UI框架,它提供了丰富的组件库,适用于...

    动态生成菜单组件并示例

    在IT领域,动态生成菜单是一项常见的需求,尤其是在开发复杂的应用程序时。动态菜单可以根据用户的权限、操作环境或者应用状态自动生成,提供个性化的用户界面。本示例将深入讲解如何实现一个动态生成菜单的组件,并...

    安卓前台之实现新闻数据列表展示(数据来源于后台)

    Adapter通常需要重写`getView()`方法,根据数据生成并设置每个列表项的View。同时,为了优化用户体验,我们还需要处理加载更多和下拉刷新的功能,这通常可以通过集成SwipeRefreshLayout和LoadMoreView来实现。 此外...

Global site tag (gtag.js) - Google Analytics