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

Android 解决Listview条目里面有Edittext数据错乱问题

2016-05-21 19:47 645 查看
当Listview的条目里面有EditText,如果数据很多的情况下,编辑数据后上下滑动,发现数据会错乱了。。。。

Activity里面就一个更新数据的方法:

/**
* 更新数据
* @param position
* @param text
*/
public void upDateData(int position,String text){
mData.get(position).setText(text);
}

JavaBean:
public class MyBean {

private int type; // 数据类型:0、TextView 1、EditText
private String text;

public MyBean(int type, String text) {
this.type = type;
this.text = text;
}

public int getType() {
return type;
}

public void setType(int type) {
this.type = type;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

@Override
public String toString() {
return "MyBean{" +
"type=" + type +
", text='" + text + '\'' +
'}';
}
}

Adapter主要的处理都在这里:
需要两个判断:一是判断所要显示的类型  二是view是不是空的

在编辑数据的时候,记得要刷新activity里面的数据

package com.zs.listwithedit;

import android.content.Context;
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.TextView;

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

/**
* Created with IntelliJ IDEA.
* **********************************
* User: zs
* Date: 2016年 05月 21日
* Time: 下午7:11
*
* @QQ : 1234567890
* **********************************
*/
public class MyAdapter extends BaseAdapter {

private Context mContext;
private List<MyBean> mData;

public MyAdapter(Context mContext,ArrayList<MyBean> data) {
this.mContext = mContext;
this.mData = data;
}

@Override
public int getCount() {
return mData.size();
}

@Override
public Object getItem(int i) {
return mData.get(i);
}

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

@Override
public int getItemViewType(int position) {
return mData.get(position).getType();
}

@Override
public int getViewTypeCount() {
return 2;
}

@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextHolder textHolder = null;
EditHolder editHolder = null;
String text = mData.get(i).getText();
// TODO 判断数据是TextView 还是 EdiText
if (getItemViewType(i) == 0){ // TextView
if (view == null){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(TextHolder.class) == false){
textHolder = new TextHolder();
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_text_layout,null);
textHolder.textView = (TextView) view.findViewById(R.id.item_tv);
view.setTag(textHolder);
}else{
textHolder = (TextHolder)object;
}
}
textHolder.textView.setText(text);
}else if (getItemViewType(i) == 1){ // EditText
if (view == null){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
Object object = view.getTag();
if (object.getClass().equals(EditHolder.class) == false){
view = LayoutInflater.from(mContext).inflate(R.layout.list_item_edit_layout,null);
editHolder = new EditHolder(view);
editHolder.editText = (EditText) view.findViewById(R.id.item_et);
view.setTag(editHolder);
}else{
editHolder = (EditHolder) object;
}
}
editHolder.position = i;
editHolder.editText.setText(text);

}

return view;
}

// 数据类型 1 TextView
class TextHolder{
private TextView textView;

}
// 数据类型 2 EditText
class EditHolder{
private EditText editText;
int position;

public EditHolder(View v)
{
editText = (EditText)v.findViewById(R.id.item_et);
// TODO 设置EditText的监听
editText.addTextChangedListener(new TextWatcher() {
public void onTextChanged(CharSequence s, int start, int before, int count) {
}

public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

public void afterTextChanged(Editable s) {
// TODO 修改数据
mData.get(position).setText(s.toString());
((MyActivity)mContext).upDateData(position,s.toString());
}
});
}
}

}


源码地址:http://download.csdn.net/detail/qq55214/9527283
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Listview Edittext