列表视图中的EditText被复制 [英] EditText in listview gets duplicated

查看:127
本文介绍了列表视图中的EditText被复制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道这个问题之前被问过很多次,并且一直在跟着他们问,我在很大程度上已经做到了,只剩下一个问题.我能够通过添加 textwatcher 来解决重复问题.并使用 hashmap 存储值,但是剩下的问题是,当我滚动回原始编辑文本时,原始编辑文本的值也消失了.我的意思是,如果我先输入诸如EditText的内容然后向下滚动,则该值不会在任何地方重复,但我键入的EditText的值也消失了.这是我的代码.

I know this question is asked many times before and followed them and I am up to the mark to a great extent with only one problem left.I was able to solve the duplicating issue by adding textwatcher and using hashmap to store value but problem that is left is that the value of original edit text is also gone when I scroll back to it. By this I mean that if I type something in say first EditText and then scroll down, that value doesn't get repeated anywhere but the value of EditText in which I typed is also gone. Here is my code.

 @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = layoutInflater.inflate(R.layout.list_planmanobra_row, parent, false);
            holder.periodo_zafra = (TextView) convertView.findViewById(R.id.periodo_zafra);
            holder.CODIGO_FINCA = (TextView) convertView.findViewById(R.id.CODIGO_FINCA);
            //holder.NOMBRE_FINCA = (TextView) convertView.findViewById(R.id.NOMBRE_FINCA);
            holder.MES = (TextView) convertView.findViewById(R.id.MES);
            holder.CLAVE = (TextView) convertView.findViewById(R.id.CLAVE);
            holder.NOMBRE_CLAVE = (TextView) convertView.findViewById(R.id.NOMBRE_CLAVE);
            holder.CODIGO_ESTANDAR = (TextView) convertView.findViewById(R.id.CODIGO_ESTANDAR);
            holder.NOMBRE_ESTANDAR_MO = (TextView) convertView.findViewById(R.id.NOMBRE_ESTANDAR_MO);
            holder.CANTIDAD_ESTANDAR = (TextView) convertView.findViewById(R.id.CANTIDAD_ESTANDAR);
            holder.VALOR_UNITARIO = (TextView) convertView.findViewById(R.id.VALOR_UNITARIO);
            holder.VALOR_TOTAL = (TextView) convertView.findViewById(R.id.VALOR_TOTAL);
            holder.EJECUTA = (TextView) convertView.findViewById(R.id.EJECUTA);
            holder.btn_submit= (Button) convertView.findViewById(R.id.btn_submit);
            holder.btn_submit.setText("Enviar");
            holder.Cantidad= (EditText) convertView.findViewById(R.id.et_cantidad);
            holder.Cantidad_empleados= (EditText) convertView.findViewById(R.id.Cantidad_empleados);
            holder.checkbox= (CheckBox) convertView.findViewById(R.id.checkbox);

            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.periodo_zafra.setText(planmanobraBeanArrayList.get(position).getPERIODO_ZAFRA());
        holder.CODIGO_FINCA.setText(planmanobraBeanArrayList.get(position).getCODIGO_FINCA());
       // holder.NOMBRE_FINCA.setText(planiBeanArrayList.get(position).getNOMBRE_FINCA());
        holder.MES.setText(planmanobraBeanArrayList.get(position).getMES());
        holder.CLAVE.setText(planmanobraBeanArrayList.get(position).getCLAVE());
        holder.NOMBRE_CLAVE.setText(planmanobraBeanArrayList.get(position).getNOMBRE_CLAVE());
        holder.CODIGO_ESTANDAR.setText(planmanobraBeanArrayList.get(position).getCODIGO_ESTANDAR());
        holder.NOMBRE_ESTANDAR_MO.setText(planmanobraBeanArrayList.get(position).getNOMBRE_ESTANDAR_MO());
        holder.CANTIDAD_ESTANDAR.setText(planmanobraBeanArrayList.get(position).getCANTIDAD_ESTANDAR());
        holder.VALOR_UNITARIO.setText(planmanobraBeanArrayList.get(position).getVALOR_UNITARIO());
        holder.VALOR_TOTAL.setText(planmanobraBeanArrayList.get(position).getVALOR_TOTAL());
        holder.EJECUTA.setText(planmanobraBeanArrayList.get(position).getEJECUTA());
        holder.Cantidad.setText(editTextList.get(position));
        holder.Cantidad.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                editTextList.put(position,charSequence.toString());
            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });
        holder.btn_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


            }
        });
        return convertView;
    }

日期是编辑文字

推荐答案

最后,我使用Focus Change Listener并在现有的arraylist中添加了另一个参数来使其工作.使用另一个列表或Hashmap对我不起作用.因此,正如 Yazan 所建议的那样,我将其添加到了阵列列表中,并且现在可以正常工作.这是我现在拥有的代码

Finally I got it working using Focus Change Listener and adding one more parameter to the existing arraylist. Using another list or Hashmap didn't worked for me. So as suggested by Yazan I added it in my arraylist and is working now. Here is the code what I have now

 holder.Cantidad.setText(planmanobraBeanArrayList.get(position).getEditext());
        final ViewHolder finalHolder = holder;
        holder.Cantidad.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if (!hasFocus)
                {
                    if (!finalHolder.Cantidad.getText().toString().equals(""))
                    {
                        planmanobraBeanArrayList.get(position).setEditext(finalHolder.Cantidad.getText().toString());
                    }else {
                        planmanobraBeanArrayList.get(position).setEditext("");
                    }
                }

            }
        });

感谢大家的帮助

这篇关于列表视图中的EditText被复制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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