EditText in listview gets duplicated

瘦欲@ 提交于 2019-12-24 13:41:14

问题


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;
    }

Cantidad is the edit text


回答1:


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("");
                    }
                }

            }
        });

Thanks for everyone help



来源:https://stackoverflow.com/questions/35967787/edittext-in-listview-gets-duplicated

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!