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

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

2015-05-06 15:14 609 查看
两个xml布局文件

[java] view
plaincopy





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>();
 

[java] view
plaincopy





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