ListView中刷新或下滑变动后EditText中的值会消失的问题

在Android或IOS开发中遇到ListView中刷新或者下滑后,再回来时前边EditText中输入的内容会消失,下面就为大家介绍一下怎解决这个问题。

1、这里简单举例介绍一下,效果图如下:

2、java代码如下:

package com.example.mylistviewbase;

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

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class MyListViewBase extends Activity {

    private ListView lv;
    @SuppressLint("UseSparseArrays")
    // 定义一个HashMap,用来存放EditText的值,Key是position
    HashMap<Integer, String> hashMap = new HashMap<Integer, String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView) findViewById(R.id.lv);
        lv.setAdapter(new MyAdapter());// 为ListView绑定Adapter
    }

    /* 定义一个addData方法,添加数据 */
    private List<String> addData() {
        List<String> list = new ArrayList<String>();
        for (int i = 0; i < 30; i++) {
            list.add("第" + i + "行");
        }
        return list;
    }

    /* 自定义一个类继承BaseAdapter,实现视图与数据的绑定 */
    private class MyAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return addData().size();// 返回数组的长度
        }

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

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

        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            // LayoutInflater是用来找res/layout/下的xml布局文件,并且实例化,作用类似于findViewById()
            // 加载布局管理填充器,将xml布局转换为view对象
            convertView = LayoutInflater.from(getApplication()).inflate(
                    R.layout.item, null);
            EditText et = (EditText) convertView
                    .findViewById(R.id.ItemEditText);
            TextView tv = (TextView) convertView.findViewById(R.id.ItemTitle);
            String str = addData().get(position); // 得到添加的数据
            tv.setText(str); // 将添加的数据显示在文本控件上

        //下边是解决消失问题的核心代码 /*设置文本监听器,一旦发现文本的内容有所改变,就立即把文本中的值保存到hashmap中*/ et.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()); } }); Log.v("position", "打印出当前的位置" + position); // 如果hashMap不为空,就把存储在hashMap中的值设置在editText中 if (hashMap.get(position) != null) { et.setText(hashMap.get(position)); } return convertView; } } }

3、XML代码如下:

  3.1、main.xml文件如下:

    

<?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"
    >
<!-- 添加一个ListView控件 -->
<ListView
    android:id="@+id/lv"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />            
</LinearLayout>

  3.2、item.xml文件如下:

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

    <EditText
        android:id="@+id/ItemEditText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLength="5"
        android:hint="点击输入"
        android:layout_alignParentRight="true" 
        android:textColor="#FFF256"/>

    <TextView
        android:id="@+id/ItemTitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />
</RelativeLayout>

 

posted @ 2016-04-29 13:33  未知的风fly  阅读(560)  评论(0编辑  收藏  举报