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

当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.youkuaiyun.com/detail/qq55214/9527283



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值