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>
csdn:https://blog.csdn.net/lzxlfly