两个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的运行原理,如下图
- //定义一个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怎么来搞定这个问题麻烦给小弟留言哈