Frage

Ich möchte RadioButton- und EditText in einer Reihe eines Listview implementieren. Ich verwende eine ArrayAdapter die Liste zu füllen. Aber das Problem ist, dass wenn ich eine RadioButton- bin die Auswahl und blättern Sie die Liste nach unten und nach oben wieder die Radiobutton, die ausgewählt wurde nicht ausgewählt ist. Das Gleiche gilt für den Inhalt der EditText. Der Text immer entfernt, wenn ich nach oben.

War es hilfreich?

Lösung

Überprüfen Sie die Adapter, sind Sie wahrscheinlich den Job richtig auf bindView() nicht tun. Sie haben wieder einstellen auf bindView() die Werte.

werde ich den Satz umformulieren, und Sie werden wahrscheinlich verstehen. Die newView() schafft nur 5-10 Ansichten (wie viele passen sie auf dem Bildschirm), und sie sind für die anderen Zeilen wiederverwendet werden. Wenn Sie eine ListView mit 200 Zeilen darin haben, haben Sie eigentlich nur 5-10 Ansichten, und Sie müssen sicherstellen, aktualisieren Sie die Ansichten mit den gültigen Änderungen in bindView(). Sie haben zum Speichern / Speichern Sie die Änderungen an ein Objekt zur späteren Wiederverwendung.

Andere Tipps

Das Problem ist, dass alle Ansichten, die den Bildschirm verlassen kann der Speicher auf dem Handy zu speichern bekommen zerstört. Wenn das Telefon würde diese eine Liste mit 1000 Einträgen nicht tun würde, den Speicher des Geräts füllen.

Aufgrund dass die Zustandsänderung, die den Radiobutton und der Text geschieht, die in der EditText eingefügt wurden, werden einfach gelöscht werden, und wenn der Benutzer blättert nach oben der Ansicht wird neu erstellt werden.

Sie müssen den Zustand des Radiobutton und das Bearbeiten von Text in Ihrem Adapter und Neuanlage den Zustand im Moment speichern Sie die Ansicht für dieses spezielle Element in Ihnen neu getView Methode.

getView Funktion in der Base Adapter. Speichert den EditText Wert und zeigt die gleiche, wenn convertView nicht null ist.

    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 ;
            }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top