Android ListView的Item中含有EditText,获取EditText里面的值并且刷新ListView值不改变

本文介绍如何在Android的ListView中正确使用EditText组件,并确保在滚动ListView时EditText的内容不会发生变化。通过使用HashMap来保存每个EditText的位置及其对应的值,再结合TextWatcher监听器实现数据持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.youkuaiyun.com/xiaanming/article/details/8536231

最近项目中用ListView ,ListView的item是EditText,然后设置EditText的值,一拉ListVIew,EditText中的值就改变了,然后自己就上网找了资料,现在将方法总结一下,菜鸟第一次写博客,大牛勿喷

 

main.xml 里面只有一个ListView

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <ListView  
  8.         android:id="@+id/listView"  
  9.         android:cacheColorHint="#000000"  
  10.         android:layout_width="fill_parent"  
  11.         android:layout_height="wrap_content" >  
  12.     </ListView>  
  13.   
  14. </LinearLayout>  


listView 每一个item布局,里面只有一个EditText

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7.     <EditText  
  8.         android:id="@+id/editText1"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="wrap_content">  
  11.   
  12.     </EditText>  
  13.   
  14. </LinearLayout>  

 

java 代码:注释写的很清楚

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.xiaanming;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.HashMap;  
  5. import java.util.List;  
  6.   
  7. import android.app.Activity;  
  8. import android.os.Bundle;  
  9. import android.text.Editable;  
  10. import android.text.TextWatcher;  
  11. import android.view.LayoutInflater;  
  12. import android.view.View;  
  13. import android.view.ViewGroup;  
  14. import android.widget.BaseAdapter;  
  15. import android.widget.EditText;  
  16. import android.widget.ListView;  
  17.   
  18. public class ListViewActivity extends Activity {  
  19.     private ListView listView;  
  20.     private Adapter adapter;  
  21.     List<String> dataList = new ArrayList<String>();  
  22.   
  23.     //定义一个HashMap,用来存放EditText的值,Key是position  
  24.     HashMap<Integer, String> hashMap = new HashMap<Integer, String>();  
  25.     /** Called when the activity is first created. */  
  26.     @Override  
  27.     public void onCreate(Bundle savedInstanceState) {  
  28.         super.onCreate(savedInstanceState);  
  29.         setContentView(R.layout.main);  
  30.           
  31.         //加入数据  
  32.         dataList = addData();  
  33.           
  34.         //实例化ListView 并设置Adapter  
  35.         listView = (ListView)findViewById(R.id.listView);  
  36.         adapter = new Adapter();  
  37.         listView.setAdapter(adapter);  
  38.     }  
  39.       
  40.     //往ListView 里面添加数据的方法  
  41.     private List<String> addData(){  
  42.         List<String> list = new ArrayList<String>();  
  43.         list.add("为你写诗");  
  44.         list.add("我爱你");  
  45.         list.add("傻瓜");  
  46.         list.add("这就是爱");  
  47.         list.add("我们在一起");  
  48.         list.add("永远不分离");  
  49.         list.add("想你的夜");  
  50.         list.add("十年");  
  51.         list.add("飞机场");  
  52.         list.add("爱很简单");  
  53.         list.add("普通朋友");  
  54.         list.add("我们两");  
  55.         list.add("富士三下");  
  56.         list.add("离别");  
  57.         list.add("们两");  
  58.           
  59.         return list;  
  60.     }  
  61.       
  62.       
  63.       
  64.       
  65.     //自定义Adapter  
  66.     class Adapter extends BaseAdapter{  
  67.   
  68.         @Override  
  69.         public int getCount() {  
  70.             return dataList.size();  
  71.         }  
  72.   
  73.         @Override  
  74.         public Object getItem(int position) {  
  75.             return dataList.get(position);  
  76.         }  
  77.   
  78.         @Override  
  79.         public long getItemId(int position) {  
  80.             return position;  
  81.         }  
  82.   
  83.         @Override  
  84.         public View getView(final int position, View convertView, ViewGroup parent) {  
  85.             String str = dataList.get(position);  
  86.             convertView = LayoutInflater.from(getApplication()).inflate(R.layout.listview_item, null);  
  87.               
  88.             final EditText editText = (EditText)convertView.findViewById(R.id.editText1);  
  89.             editText.setText(str);  
  90.               
  91.             //为editText设置TextChangedListener,每次改变的值设置到hashMap  
  92.             //我们要拿到里面的值根据position拿值  
  93.             editText.addTextChangedListener(new TextWatcher() {  
  94.                 @Override  
  95.                 public void onTextChanged(CharSequence s, int start, int before, int count) {  
  96.                       
  97.                 }  
  98.                   
  99.                 @Override  
  100.                 public void beforeTextChanged(CharSequence s, int start,   
  101.                         int count,int after) {  
  102.                       
  103.                 }  
  104.                   
  105.                 @Override  
  106.                 public void afterTextChanged(Editable s) {  
  107.                     //将editText中改变的值设置的HashMap中  
  108.                     hashMap.put(position, s.toString());  
  109.                 }  
  110.             });  
  111.               
  112.             //如果hashMap不为空,就设置的editText  
  113.             if(hashMap.get(position) != null){  
  114.                 editText.setText(hashMap.get(position));  
  115.             }  
  116.               
  117.               
  118.             return convertView;  
  119.         }  
  120.           
  121.     }  
  122.       
  123. }  


如果你想得到每个editText中的值,根据position就可以拿到啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值