`
king_tt
  • 浏览: 2232746 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

阅读更多

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

 

main.xml 里面只有一个ListView

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ListView
        android:id="@+id/listView"
        android:cacheColorHint="#000000"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>


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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/editText1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">

    </EditText>

</LinearLayout>

 

java 代码:注释写的很清楚

package com.xiaanming;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class ListViewActivity extends Activity {
	private ListView listView;
	private Adapter adapter;
	List<String> dataList = new ArrayList<String>();

	//定义一个HashMap,用来存放EditText的值,Key是position
	HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //加入数据
        dataList = addData();
        
        //实例化ListView 并设置Adapter
        listView = (ListView)findViewById(R.id.listView);
        adapter = new Adapter();
        listView.setAdapter(adapter);
    }
    
    //往ListView 里面添加数据的方法
    private List<String> addData(){
    	List<String> list = new ArrayList<String>();
    	list.add("为你写诗");
    	list.add("我爱你");
    	list.add("傻瓜");
    	list.add("这就是爱");
    	list.add("我们在一起");
    	list.add("永远不分离");
    	list.add("想你的夜");
    	list.add("十年");
    	list.add("飞机场");
    	list.add("爱很简单");
    	list.add("普通朋友");
    	list.add("我们两");
    	list.add("富士三下");
    	list.add("离别");
    	list.add("们两");
    	
		return list;
    }
    
    
    
    
    //自定义Adapter
    class Adapter extends BaseAdapter{

		@Override
		public int getCount() {
			return dataList.size();
		}

		@Override
		public Object getItem(int position) {
			return dataList.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			String str = dataList.get(position);
			convertView = LayoutInflater.from(getApplication()).inflate(R.layout.listview_item, null);
			
			final EditText editText = (EditText)convertView.findViewById(R.id.editText1);
			editText.setText(str);
			
			//为editText设置TextChangedListener,每次改变的值设置到hashMap
			//我们要拿到里面的值根据position拿值
			editText.addTextChangedListener(new TextWatcher() {
				@Override
				public void onTextChanged(CharSequence s, int start, int before, int count) {
					
				}
				
				@Override
				public void beforeTextChanged(CharSequence s, int start, 
						int count,int after) {
					
				}
				
				@Override
				public void afterTextChanged(Editable s) {
					//将editText中改变的值设置的HashMap中
					hashMap.put(position, s.toString());
				}
			});
			
			//如果hashMap不为空,就设置的editText
			if(hashMap.get(position) != null){
				editText.setText(hashMap.get(position));
			}
			
			
			return convertView;
		}
    	
    }
    
}


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

分享到:
评论

相关推荐

    获取ListView的item中的EditText的值

    在某些应用场景中,我们可能需要从ListView的每一项(item)中获取EditText控件的输入值,例如用户填写表单或者搜索框等。这个过程涉及到对ListView的适配器(Adapter)操作以及对每个列表项的视图(View)的访问。...

    ListView获取item中EditText值

    因此,直接在点击事件或者监听器中获取EditText的值通常是不可靠的,因为此时的EditText可能已经被复用,显示的是其他Item的数据。 要解决这个问题,我们需要在ListView适配器(通常继承自BaseAdapter)中处理...

    Android中ListView多个Edittext获取输入内容.rar

    然而,当ListView的每个Item中包含多个EditText时,获取用户在这些EditText中输入的内容可能会变得复杂。本资源"Android中ListView多个Edittext获取输入内容.rar"显然是为了帮助开发者解决这个问题。 首先,我们来...

    动态获取listView中的edittext的值

    在实际应用中,我们常常需要与ListView中的各个元素进行交互,比如获取EditText控件的输入值,或者根据用户操作动态删除列表项。本文将详细介绍如何在ListView中实现这两个功能。 首先,我们需要了解ListView的工作...

    Android完美解决listview中多个edittext显示混乱问题

    然而,在ListView中嵌套多个EditText时,常常会遇到一个问题,即用户在EditText中输入内容时,ListView滚动时导致显示混乱,原本输入的位置与EditText不匹配,这被称为“EditText焦点错乱”或“ListView复用机制问题...

    ListView中的EditText

    在标题和描述中提到的问题是关于如何在ListView中改变并获取EditText的值。以下是一种常见的解决方案: 首先,你需要创建一个自定义的BaseAdapter,比如`ListEditorAdapter`。这个适配器会负责填充ListView的每一项...

    listView中嵌套EditText,动态获取EditText中的值

    本篇文章将详细探讨如何在ListView中嵌套EditText,并动态获取每个EditText中的输入值。 首先,我们创建一个自定义的ListView项布局,该布局包含一个EditText。自定义布局通常放在res/layout目录下,例如`list_item...

    安卓自定义ListView中含有EditText控件

    然而,当在自定义的ListView中添加EditText控件时,会遇到一些特殊的挑战,因为ListView的复用机制可能导致数据丢失或者冲突。本文将深入探讨如何在自定义ListView中正确地使用和管理EditText控件。 首先,我们需要...

    listview item上面包含多个edittext和一个CheckBox的方案

    - 在ListView中使用EditText需要监听焦点变化,确保在Item滚动时保存当前EditText的值,避免滚动过程中数据丢失。 - 需要处理文本输入监听(TextWatcher),以便在EditText内容改变时更新数据模型。 3. **...

    X宝买的。完美解决Android-listview中多个edittext显示混乱问题

    然而,当ListView中的item包含多个EditText时,往往会出现显示混乱的问题。这个问题主要是由于ListView的复用机制导致的,即同一个ListView item在不同位置被重复使用,如果没有正确处理,就可能出现输入框内容错位...

    动态获取ListView中EditText中输入的值

    在某些应用场景中,我们可能需要在ListView的每一项(item)中包含一个EditText,让用户输入数据,并实时获取这些输入值。这就涉及到了如何动态地从ListView中的EditText获取用户输入的信息。以下将详细介绍实现这一...

    android listview带有editText

    当EditText的文本改变时,将其更新到对应的模型数据中,这样即使视图被复用,也能从数据模型中恢复正确的状态。 在实际应用中,可能还会遇到其他相关问题,如点击事件冲突、键盘弹出时ListView的滚动行为等。对于...

    Listview中通过ImageView改变EditText值

    在这个场景中,我们探讨的是如何在ListView的每一项中结合ImageView和EditText,实现点击ImageView时EditText数值的增减。这个功能通常应用于计数器或者评分系统等交互场景。 首先,我们需要创建一个自定义的...

    android listview中有edittext的demo

    当我们在ListView中需要实现用户可编辑的输入功能时,通常会在每个列表项中嵌入一个EditText。本示例"android listview中有edittext的demo"就是针对这种场景进行的实践。以下是关于这个主题的详细知识点: 1. **...

    ListView+EditText混乱问题

    标题"ListView+EditText混乱问题"所提及的就是这样一个典型的问题:当用户在ListView中的一个EditText控件中输入文字后,如果ListView滚动或用户点击其他地方,EditText的内容可能会显示不正确,甚至丢失。...

    listview动态添加、删除带edittext的item

    这个问题通常源于ListView的复用机制,即ListView的每个Item(ViewHolder)在滚动时会被复用,如果不正确处理,EditText的数据就会混淆。 首先,我们要理解ListView的工作原理。ListView通过Adapter来绑定数据源,...

    Listview中的EditText数值的存储

    - 应用重启或者ListView刷新时,需要从存储中恢复EditText的值。可以通过读取SharedPreferences或查询SQLite数据库,将数据填充回对应的EditText中。 6. **事件监听**: - 为了捕获用户在EditText中的输入,需要...

    ListView条目中有EditText

    当在ListView的条目(Item)中集成EditText时,可以实现用户输入交互,例如在列表中进行编辑、评论等操作。以下是对这个功能的详细解释和实现步骤。 1. **ListView的基本使用** - ListView是一个可滚动的视图容器...

    ListView每个Item添加EditText,输入数据不窜行

    然而,当在ListView的每个Item中添加EditText时,可能会遇到一个棘手的问题:用户在EditText中输入的数据可能会在滚动ListView时“窜行”,即原本输入到某个Item的数据在滚动后显示在了其他Item上。这个问题主要是...

Global site tag (gtag.js) - Google Analytics