Android - ListView自定义Adapter中获得EditText的值
2014-05-07 09:52
399 查看
两个xml布局文件
建立一个ListView,其中每一个item上都有一个TextView, 一个EditView
当ListView出现滚动条的时候,有个问题就出现了,在滑动listview的时候会发现后面的EditView会填上前面的EditView中的值.
首先看一下listview的运行原理,如下图
我自己通过ViewHolder始终没能解决这个文字信息乱跳问题,所幸直接不用Viewholder,用最简单的convetView来处理,首先
//定义一个HashMap,用来存放EditText的值,Key是position
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
也算是解决了文字乱跳的问题。。各位大牛要是知道用ViewHolder怎么来搞定这个问题麻烦给小弟留言哈
main.xml <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout android:id="@+id/widget0" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" > <ListView android:id="@+id/LV" android:layout_width="252px" android:layout_height="278px" android:layout_x="10px" android:layout_y="118px" > </ListView> </AbsoluteLayout> 2.list_view.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout android:id="@+id/RelativeLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content" xmlns:android="http://schemas.android.com/apk/res/android" > <EditText android:id="@+id/Erm_qty" android:layout_width="60px" android:layout_height="38px" android:textSize="12sp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:numeric="integer" android:singleLine="true" > </EditText> <TextView android:id="@+id/Trm_type" android:layout_width="273px" android:layout_height="34px" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:textSize="15sp" > </TextView> </RelativeLayout>
建立一个ListView,其中每一个item上都有一个TextView, 一个EditView
当ListView出现滚动条的时候,有个问题就出现了,在滑动listview的时候会发现后面的EditView会填上前面的EditView中的值.
首先看一下listview的运行原理,如下图
我自己通过ViewHolder始终没能解决这个文字信息乱跳问题,所幸直接不用Viewholder,用最简单的convetView来处理,首先
//定义一个HashMap,用来存放EditText的值,Key是position
HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
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; } } }
也算是解决了文字乱跳的问题。。各位大牛要是知道用ViewHolder怎么来搞定这个问题麻烦给小弟留言哈
相关文章推荐
- Android - ListView自定义Adapter中获得EditText的值
- Android - ListView自定义适配器Adapter中获得EditText的值
- 【转】Android之自定义Adapter的ListView
- Android自定义ListView或GridView适配器Adapter的getView方法不执行的问题
- Android之Listview(item为单选题)自定义adapter,像考试时前面的10几道单选题的实现
- Android中自定义Adapter实现ListView动态刷新进度条
- Android之自定义Adapter的ListView
- Android之自定义Adapter的ListView
- Android定制ListView的界面(使用继承自ArrayAdapter的自定义适配器)--《第一行代码Android》学习笔记
- Android之自定义Adapter的ListView
- Android中自定义Adapter实现ListView动态刷新进度条
- Android之自定义Adapter的ListView
- Android中listview布局,自定义adapter,长按,点击,退出的demo
- 无废话Android之listview入门,自定义的数据适配器、采用layoutInflater打气筒创建一个view对象、常用数据适配器ArrayAdapter、SimpleAdapter、使用ContentProvider(内容提供者)共享数据、短信的备份、插入一条记录到系统短信应用(3)
- Android之自定义Adapter的ListView
- Android listview与adapter用法(包括自定义需要的适配器)
- android自定义BaseAdapter,实现从网络加载包含图片的listview
- Android之自定义Adapter的ListView
- android ListView布局之三(使用自定义的Adapter绑定数据,通过contextView.setTag绑定数据)有按钮的ListView
- 【转】Android之自定义Adapter的ListView