您的位置:首页 > 移动开发 > Android开发

Android - ListView自定义Adapter中获得EditText的值

2014-05-07 09:52 399 查看
两个xml布局文件

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怎么来搞定这个问题麻烦给小弟留言哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐