如何获取listview里面的edittext或者RadioGroup的值,涉及到引发的混乱现象
最近要实现从数据库读数据,该数据对应listview的item布局里面的RadioButton值,并且item布局里面还有EditText的控件。
如何将每一条对应的listview对应值获取出来呢?
实现原理是在作为ArrayAdapter的参数的数据源对象(如数组,集合),举例:
ArrayList<MyClass> arrayList = new ArrayList<MyClass>();
ArrayAdapter arrayAdapter = new ArrayAdapter(MyActivity.this,R.layout.item,arrayList )
其实就是arrayList 中的MyClass对象,在该对象中定义一个字符串来保存RadioGroup对应的值。EditText也是如此。
listview的item布局,quality_item.xml
<?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:padding="5dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:background="@drawable/corner_white_"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/corner_biaoge"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="序号:"
android:gravity="center"
/>
<TextView
android:id="@+id/xuhao"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:layout_gravity="center"
android:gravity="center"
android:textColor="@color/textColor"
android:text="1111"/> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/corner_biaoge"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="检验内容:"
android:gravity="center" />
<TextView
android:id="@+id/item_desc"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text=""/> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/corner_biaoge"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="检验标准:"
android:gravity="center" />
<TextView
android:id="@+id/item_ok"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:layout_gravity="center"
android:gravity="center_vertical"
android:text=""/> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/corner_biaoge"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="检验结果:"
android:gravity="center" />
<RadioGroup
android:id="@+id/item_result"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="horizontal"
>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<RadioButton
android:id="@+id/item_a"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:layout_gravity="center_vertical"
android:text=""
/>
<RadioButton
android:id="@+id/item_b"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:layout_gravity="center_vertical"
android:text=""/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</RadioGroup> </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/corner_biaoge"
>
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="备注:"
android:gravity="center"
/>
<EditText
android:id="@+id/item_remark"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_weight="3"
android:layout_gravity="center"
android:gravity="center"
android:background="@drawable/corner_text_input"
/>
</LinearLayout>
</LinearLayout> </LinearLayout>

布局情况如图所示。要获取检验结果的值(RaidoGroup)和备注值(EditText)
下面代码为自定义适配器的代码
public class QualityItemAdapter extends ArrayAdapter{
private int resourceId;
private List<QualityInfo> mData;
public QualityItemAdapter(Context context, int resource, List objects) {
super(context, resource, objects);
mData=objects;
resourceId=resource;
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final QualityInfo qualityInfo = (QualityInfo) getItem(position);
final ViewHolder viewHolder;
View view;
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resourceId,null);
viewHolder= new ViewHolder();
viewHolder.xuhaoText= (TextView) view.findViewById(R.id.xuhao);
viewHolder.item_desc_Text= (TextView) view.findViewById(R.id.item_desc);
viewHolder.item_ok_Text=(TextView) view.findViewById(R.id.item_ok);
viewHolder.item_result_Group= (RadioGroup) view.findViewById(R.id.item_result);
viewHolder.item_a_Button=(RadioButton) view.findViewById(R.id.item_a);
viewHolder.item_b_Button=(RadioButton) view.findViewById(R.id.item_b);
viewHolder.item_remark_Edit= (EditText) view.findViewById(R.id.item_remark);
viewHolder.item_remark_Edit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
QualityInfo qualityInfo2= (QualityInfo) viewHolder.item_remark_Edit.getTag();
qualityInfo2.setEditString(editable.toString());
}
});
view.setTag(viewHolder);//将viewholder存储在View中
}else{
view=convertView;
viewHolder= (ViewHolder) view.getTag();
}
viewHolder.xuhaoText.setText(position+1+"");
viewHolder.item_desc_Text.setText(qualityInfo.getItem_desc());
viewHolder.item_ok_Text.setText(qualityInfo.getItem_ok());
viewHolder.item_a_Button.setText(qualityInfo.getItem_a());
viewHolder.item_b_Button.setText(qualityInfo.getItem_b());
viewHolder.item_remark_Edit.setTag(qualityInfo);
viewHolder.item_remark_Edit.clearFocus();//清除焦点
viewHolder.item_result_Group.setId(position);
viewHolder.item_result_Group.setOnCheckedChangeListener(null);//在显示RadioButton值之前,取消对其监听,否则会出现混乱的效果。
if(qualityInfo.getItem_a().equals(qualityInfo.getItem_result())){
viewHolder.item_result_Group.check(viewHolder.item_a_Button.getId());
}else if (qualityInfo.getItem_b().equals(qualityInfo.getItem_result())){
viewHolder.item_result_Group.check(viewHolder.item_b_Button.getId());
}else{
viewHolder.item_result_Group.clearCheck();
}
if (!TextUtils.isEmpty(qualityInfo.getEditString())){
viewHolder.item_remark_Edit.setText(qualityInfo.getEditString());
}else{
viewHolder.item_remark_Edit.setText("");
}
viewHolder.item_result_Group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkId) {
QualityInfo qualityInfo1 = mData.get(radioGroup.getId());
if (qualityInfo1 == null) return;
switch(checkId){
case R.id.item_a:
qualityInfo1.setItem_result(qualityInfo1.getItem_a());
break;
case R.id.item_b:
qualityInfo1.setItem_result(qualityInfo1.getItem_b());
break;
}
}
});
return view;
}
class ViewHolder {
TextView xuhaoText;
TextView item_desc_Text;
TextView item_ok_Text;
RadioGroup item_result_Group;
RadioButton item_a_Button;
RadioButton item_b_Button;
EditText item_remark_Edit;
}
}
在这里需要对EditText的设置监听对象addTextChangedListener,在afterTextChanged方法中,获取当前位置所对应的 QualityInfo 对象,将当前的EditText值存储在该对象中。
对RadioGroup设置监听setOnCheckedChangeListener,同样也是获取到当前位置所对应的QualityInfo 对象,将当前值存储到对象中。
在这段代码中,有两处代码非常重要:
否则会出先混乱效果
1, viewHolder.item_remark_Edit.clearFocus();//清除焦点 ,在setText之前。
2, viewHolder.item_result_Group.setOnCheckedChangeListener(null);//在显示RadioButton值之前,取消对其监听,否则会出现混乱的效果。
QualityInfo 对象就是简单的定义了一些String的set和get 方法。比较简单就不贴代码了
如何获取listview里面的edittext或者RadioGroup的值,涉及到引发的混乱现象的更多相关文章
- Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题?
Android N(7.0) 在ListView里显示EditText时软键盘弹出时会自动切换到全键盘的问题? 问题症状描述 Activity 在AndroidManifest.xml里设置andro ...
- 自定义ListView里面的Item的内容
我们不可能满足只是往每个item里面填字就足够,像QQ的好友列表就是一个ListView,每个Item里面有头像.名字啊.签名什么的,内容丰富.那我们要怎么定义一个内容丰富的item呢? 要用到Ada ...
- 获取androdmanifest里面的meta-data
/* * Copyright 2017 JessYan * * Licensed under the Apache License, Version 2.0 (the "License&qu ...
- js和jquery获取span里面的值
JQ和Js获取span标签的内容 html: 1 <span id="content">‘我是span标签的内容’</span> javascript获取: ...
- spring Controller 层注解获取 properties 里面的值
前言:最近在做一个项目,想要在 controller 层直接通过注解 @Value("")来获取 properties 里面配置的属性. 这个其实和 springmvc.sprin ...
- 获取响应里面的cookie的方法
使用方法: R.cookies.get_dict() 获取响应返回的cookies
- jquery获取transform里面的值
用transform的translateX写了一个侧滑效果,如何获取它改变的值是多少呢? 获取translateX值的方法: $('div').css("transform").r ...
- 小程序mpvue怎么点击按钮获取button里面的值
在小程序里面是没有dom元素的,这个我们只要会小程序的应该都知道,但是在平时开发中我们偶尔会遇到需要点击某个元素获取它的值的情况,在这里给大家列举了两种情况解决方法 方式一:数据绑定 这种情况的话,对 ...
- js获取iframe里面的dom
最近在写页面遇到了问题,一个dom好多地方用到,然后我就单独写了个html页面,然后用iframe引入,但是,想获取iframe里面input的value,获取不到input,后面才知道原来js不能直 ...
随机推荐
- 剑指offer十九之顺时针打印矩阵
一.题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2, ...
- SpringBoot + docker + neo4j
下拉镜像 docker pull neo4j 启动镜像 docker run -d -p 7473:7473 -p 7687:7687 -p 7474:7474 neo4j 打开浏览器:http:// ...
- Vue2.0-token权限处理
token一种身份的验证,在大多数网站中,登录的时候都会携带token,去访问其他页面,token就想当于一种令牌.可以判断用户是否登录状态.本次页面是通过Element-ui搭建的登录界面 当用户登 ...
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(五):模块化切分
切分工程 考虑到后续我们的模块会越来越多,依赖的公共代码和配置需要集中管理,我们在这里先把公共模块和配置从后台管理业务中剥离出来. 新增两个工程,切分后结构如下: kitty-boot:启动器及全局配 ...
- php 通过 strtr 方法来替换文本中指定的内容
通过在文本中指定待替换的内容,如: [{name}] [{age}] 格式可以自己定义, 大概过程: 在文本中定义需要替换的文本内容: 以键值对的方式 组织数据(数组): 用 file_get_con ...
- 深入Spring:自定义事务管理
转自: http://www.jianshu.com/p/5347a462b3a5 前言 上一篇文章讲了Spring的Aop,这里讲一下Spring的事务管理,Spring的事务管理是建立在Aop的基 ...
- AD阶段分类论文阅读笔记
A Deep Learning Pipeline for Classifying Different Stages of Alzheimer's Disease from fMRI Data -- Y ...
- Java转义emoji等特殊符号
写在前面 网上找了很多转emoji等方法,大多有两种方法 更改数据库编码格式为utf8mb4 过滤字符串中的emoji 都不是很优雅 更改数据库编码,势必影响其他数据库 过滤emoj效率比较低 处理E ...
- ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(7)- EF增删改查
前言 上一节创建了实体数据库,这次我们来看看怎么操作这个实体 代码实现 新建一个UserInfoController的控制器:不需要写什么代码,系统自动生成Index方法: 创建IDAL,DAL,IB ...
- EF访问数据库报“ExecuteReader 要求已打开且可用的 Connection。连接的当前状态为已关闭。”错误
我发生这个问题的原因是因为我用EF访问数据库时用的用到了两用方式,如下图 第一种方式访问时不会出现此错误,出现错误的是第二种方式,下图是dal层代码 其中红框中的代码是出现错误之后改正的代码,也就是说 ...