Listview EditText值在滚动时更改 [英] Listview edittext value changing on scrolling

查看:68
本文介绍了Listview EditText值在滚动时更改的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个列表视图,每一行都有一些edittext.首次加载时,我已为每个edittext分配了值,并且这些值是可编辑的.我可以在该edittext中编辑值.我的问题是,在更改了行的位置之后,即:滚动后,我在该edittexts中获得了初始值,而不是已编辑的值.在过去的6个小时中,我一直在为此工作.任何人都可以帮助我.

I have a listview and in each row there are some edittext. On loading for the firsttime I have assigned values to every edittexts and are editable. I can edit the values in that edittext. My problem is that after changing the position of that rows ie: after scrolling I am getting the initial values in that edittexts, not the editted values. I am working on this for the past 6 hours. Any one please help me.

这是我的适配器类

public class ListAdapter_baradmin extends BaseAdapter{

Context ctx;
LayoutInflater lInflater;
public ArrayList myItems = new ArrayList();


public static String[] str_Id           = new String[datalength];
public static String[] str_Idoriginal   = new String[datalength];
public static String[] str_Desc         = new String[datalength];
public static String[] str_UOM          = new String[datalength];
public static String[] str_Parlevel     = new String[datalength];
public static String[] str_Openingstock = new String[datalength];
public static String[] str_Reg          = new String[datalength];
public static String[] str_Intertransfer= new String[datalength];
public static String[] str_Closingstock = new String[datalength];
public static String[] str_Remark       = new String[datalength];

SeparatedListAdapter separatedListAdapter;

ArrayList<String> Data_id           = new ArrayList<String>();
ArrayList<String> Data_name         = new ArrayList<String>();
ArrayList<String> Data_parlevel     = new ArrayList<String>();
ArrayList<String> Data_uom          = new ArrayList<String>();

ArrayList<String> Data_Openingstock = new ArrayList<String>();
ArrayList<String> Data_Reg          = new ArrayList<String>();
ArrayList<String> Data_Intertransfer= new ArrayList<String>();
ArrayList<String> Data_Closingstock = new ArrayList<String>();
ArrayList<String> Data_Remark       = new ArrayList<String>();


public ListAdapter_baradmin(Context context
        ,ArrayList<String> Items_id
        ,ArrayList<String> Items_desc
        ,ArrayList<String> Items_perunitcost
        ,ArrayList<String> Items_uom
        ,ArrayList<String> Items_idoriginal
        ,ArrayList<String> Items_os
        ,ArrayList<String> Items_intertransfer
        ,ArrayList<String> Items_cs
        ,ArrayList<String> Items_remark
        ,ArrayList<String> Items_reg) {

    ctx = context;   

    Data_id         .addAll(Items_id);
    Data_name       .addAll(Items_desc);
    Data_parlevel   .addAll(Items_perunitcost);
    Data_uom        .addAll(Items_uom);

    Data_Openingstock   .addAll(Items_os);
    Data_Reg            .addAll(Items_reg);
    Data_Intertransfer  .addAll(Items_intertransfer);
    Data_Closingstock   .addAll(Items_cs);
    Data_Remark         .addAll(Items_remark);


    for(int i=0;i<Items_id.size();i++){

        str_Id[i]           = Items_id.get(i);
        str_Idoriginal[i]   = Items_idoriginal.get(i);
        str_Desc[i]         = Items_desc.get(i);
        str_UOM[i]          = Items_uom.get(i);
        str_Parlevel[i]     = Items_perunitcost.get(i);

        str_Openingstock[i] = Items_os.get(i);
        str_Reg[i]          = Items_reg.get(i);
        str_Intertransfer[i] = Items_intertransfer.get(i);
        str_Closingstock[i] = Items_cs.get(i);
        str_Remark[i]       = Items_remark.get(i);

        //System.out.println("str_Idoriginal  "+str_Idoriginal[i]);

    }


    notifyDataSetChanged();



}

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

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

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



@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    lInflater = (LayoutInflater) ctx
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final ViewHolder holder;

    if (convertView == null) {
        holder = new ViewHolder();
        //convertView = (View)lInflater.inflate(R.layout.baradmin_row, null);
        convertView = (View) lInflater.inflate(R.layout.baradmin_row, parent, false);

        //holder  = new ViewHolder();

        holder.editText_id                      = (EditText) convertView.findViewById(R.id.edittext_slno_baradmin);
        holder.editText_desc                    = (EditText) convertView.findViewById(R.id.edittext_desc_baradmin);
        holder.editText_uom                     = (EditText) convertView.findViewById(R.id.edittext_uom_baradmin);
        holder.editText_parlevel                = (EditText) convertView.findViewById(R.id.edittext_parlevel_baradmin);
        holder.edittext_openingstock_baradmin   = (EditText) convertView.findViewById(R.id.edittext_openingstock_baradmin);
        holder.edittext_reg_baradmin            = (EditText) convertView.findViewById(R.id.edittext_reg_baradmin);
        holder.edittext_intertransfer_baradmin  = (EditText) convertView.findViewById(R.id.edittext_intertransfer_baradmin);
        holder.edittext_closingstock_baradmin   = (EditText) convertView.findViewById(R.id.edittext_closingstock_baradmin);
        holder.edittext_remark_baradmin         = (EditText) convertView.findViewById(R.id.edittext_remark_baradmin);


        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    try {

        holder.editText_id          .setText(position+1+"");
        holder.editText_desc        .setText(Data_name.get(position));
        holder.editText_uom         .setText(Data_uom.get(position));
        holder.editText_parlevel    .setText(Data_parlevel.get(position));

        holder.edittext_reg_baradmin            .setText(Data_Reg.get(position));
        holder.edittext_openingstock_baradmin   .setText(Data_Openingstock.get(position));
        holder.edittext_intertransfer_baradmin  .setText(Data_Intertransfer.get(position));
        holder.edittext_closingstock_baradmin   .setText(Data_Closingstock.get(position));
        holder.edittext_remark_baradmin         .setText(Data_Remark.get(position));

        setNameTextChangeListener(holder);

        holder.edittext_openingstock_baradmin.setOnFocusChangeListener(new OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus){


                    str_Openingstock[position] = holder.edittext_openingstock_baradmin.getText().toString();

                }
            }
        });




    } catch (Exception e) {
        // TODO: handle exception
    }


    return convertView;
}
class ViewHolder {
    EditText editText_id, editText_desc, editText_uom, editText_parlevel,
    edittext_openingstock_baradmin, edittext_reg_baradmin, edittext_intertransfer_baradmin,
    edittext_closingstock_baradmin, edittext_remark_baradmin;
}

private void setNameTextChangeListener(final ViewHolder holder) {
    holder.edittext_openingstock_baradmin.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            System.out.println("s.toString()  "+s.toString());
            //holder.edittext_openingstock_baradmin.setText(s.toString());
        }

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

        @Override
        public void afterTextChanged(Editable s) { }
    });
}

class ListItem {
    String caption;
}

}

推荐答案

您必须更新数组中的s.toString()值.

You have to update s.toString() value in your array.

Data_Openingstock.set(position, s.toString());

setNameTextChangeListener(Holder holder, int position);

private void setNameTextChangeListener(final ViewHolder holder, final int position) {
    holder.edittext_openingstock_baradmin.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

    //do null check first before converting to string

if(s.length() > 0)
{
System.out.println("s.toString()  "+s.toString());
Data_Openingstock.set(position, s.toString());
}

       }

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

        @Override
        public void afterTextChanged(Editable s) { }
    });
}

这篇关于Listview EditText值在滚动时更改的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆