Pregunta

Quiero poner en práctica RadioButton y EditarTexto dentro de una fila de un ListView. Estoy utilizando un ArrayAdapter para rellenar la lista. Pero el problema es que cuando estoy seleccionando un RadioButton y desplazarse por la lista y desplazarse hacia arriba de nuevo el botón de radio que había sido seleccionada no está seleccionada. Lo mismo con el contenido de la EditarTexto. El texto consiguiendo quitar cuando me desplazo hacia arriba.

¿Fue útil?

Solución

Comprobar el adaptador, es probable que no lo haga bien el trabajo en bindView(). Usted tiene que fijar de nuevo el bindView() los valores.

voy a reformular la frase y que probablemente va a entender. El newView() crea sólo 5-10 puntos de vista (como muchos que caben en la pantalla), y que se reutilizan para otras filas. Si usted tiene un ListView con 200 líneas en él, en realidad tiene sólo 5-10 puntos de vista, y usted tiene que asegurarse de que actualice los puntos de vista con los cambios válidos en bindView(). Usted tiene que almacenar / guardar los cambios en un objeto para su posterior reutilización.

Otros consejos

El problema es que todos los puntos de vista que salen de la pantalla pueden quedar destruidos para ahorrar memoria en el teléfono. Si el teléfono no haría esta lista una con 1000 entradas llenaría la memoria de su dispositivo.

Debido a que el cambio de estado que está pasando con el botón de radio y el texto que se inserta en el EditarTexto simplemente se eliminarán y si se volverá a crear el usuario se desplaza hasta la vista.

Es necesario guardar el estado del botón de radio y de la edición de texto en su adaptador y volver a aplicar el estado en el momento que vuelva a crear la vista de ese elemento especial en la que método getView .

Función getView en Adaptador de Base. Guarda el valor EditarTexto y muestra la misma si convertView no es nulo.

    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.list_row_person, null);
            holder = new ViewHolder();
            holder.PersonNameView = (TextView) convertView.findViewById(R.id.PersonNameView);
            holder.SpendAmount = (EditText) convertView.findViewById(R.id.SpendAmt);
            holder.SpendAmount.addTextChangedListener(new TextWatcher() {

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                    // TODO Auto-generated method stub
                    int position2 = holder.SpendAmount.getId();
                    EditText Caption = (EditText) holder.SpendAmount;
                    Person per= (Person)holder.SpendAmount.getTag();
                    //SpendAmount is of Double type
                    if(s.toString().length()>0){
                    per.setSpendAmount(Double.parseDouble(s.toString()));
                    per.setFlag(true);}
                    else{
                         Toast.makeText(getApplicationContext(), "Please enter some value", Toast.LENGTH_SHORT).show();
                        }





                }

                @Override
                public void beforeTextChanged(CharSequence s, int start, int count,
                        int after) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void afterTextChanged(Editable s) {
                    // TODO Auto-generated method stub

                }
            });




            holder.SpendAmount.setTag(listData.get(position));
            convertView.setTag(holder);

        } else {

            ((ViewHolder)convertView.getTag()).SpendAmount.setTag(listData.get(position));
            holder = (ViewHolder) convertView.getTag();

        }


        holder.PersonNameView.setText(listData.get(position).getPersonName());
        holder.SpendAmount.setText(listData.get(position).getSpendAmount().toString());



        return convertView;




    }
     class ViewHolder {
        TextView PersonNameView;
        EditText SpendAmount ;
            }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top