Domanda

Voglio realizzare RadioButton e EditText all'interno di una riga di una ListView. Sto usando un ArrayAdapter per popolare la lista. Ma il problema è che quando sto selezionando un RadioButton e scorrere l'elenco e scorrere di nuovo il pulsante radio che era stato selezionato non è selezionata. Lo stesso con il contenuto del EditText. Il testo ottenendo rimosso quando ho scorrere verso l'alto.

È stato utile?

Soluzione

Controlla il tuo adattatore, si sono probabilmente non fare il proprio lavoro su bindView(). È necessario impostare nuovamente bindView() i valori.

io riformulare la frase e probabilmente capirà. Il newView() crea solo 5-10 viste (come molti si inseriscono sullo schermo), e sono riutilizzati per altre righe. Se si dispone di un ListView con 200 linee in esso, in realtà si hanno solo 5-10 punti di vista, e si deve fare in modo di aggiornare i punti di vista con le modifiche valide in bindView(). È necessario memorizzare / salvare le modifiche apportate a un oggetto per un successivo riutilizzo.

Altri suggerimenti

Il problema è che tutte le viste che lasciano lo schermo possono ottenere distrutto per risparmiare memoria sul telefono cellulare. Se il telefono non avrebbe fatto questa lista a con 1000 voci sarebbe riempire la memoria del dispositivo.

A causa di ciò il cambiamento di stato che sta accadendo il pulsante radio e il testo che è stato inserito nel EditText saranno semplicemente cancellati e se verranno ricreate l'utente scorre la vista.

È necessario salvare lo stato del RadioButton e modificare il testo in vostro adattatore e riapplicare lo stato al momento di ricreare la vista per un determinato oggetto in voi metodo GetView .

funzione GetView in adattatore Base. Salva il valore EditText e mostra lo stesso se convertView non è nullo.

    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 ;
            }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top