it-swarm.com.de

Wie man EditText in der Listenansicht hinzufügt und seinen Wert dynamisch in allen Zeilen erhält?

Ich habe Checkbox und EditText und eine Textansicht in einer ListView. Wert für die Textansicht wird aus einer Liste abgerufen. Das Kontrollkästchen wird dynamisch aktiviert. In gleicher Weise kann EditText auch dynamisch eingegeben werden. Jetzt ist mein Problem, wenn ich die Listenansicht (auf und ab) scrolle, nachdem ich den Text in den Text bearbeiten eingegeben habe, konnte ich den eingegebenen Wert nicht erhalten. Ich überprüfe das Kontrollkästchen auch so. Aber mit der Position habe ich es richtig eingestellt. Ich konnte nicht wissen, wie der EditText-Wert richtig auf die Liste gesetzt wird. Bitte hilf mir. Hier ist mein Code:

main.xml: (Haupt-XML zum Starten)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >

<ListView
Android:id="@+id/my_list"
Android:layout_width="fill_parent"
Android:layout_height="250px" />
<Button 
Android:text="Save" 
Android:id="@+id/btnSave" 
Android:layout_width="wrap_content" 
Android:layout_height="wrap_content"/>

</LinearLayout>

row.xml: (ListView Row)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >

<TextView
Android:id="@+id/label"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@+id/label"
Android:textSize="30sp"/>

<CheckBox
Android:id="@+id/check"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"/>
<EditText 
Android:text=""
Android:id="@+id/txtAddress"
Android:layout_width="150px"
Android:layout_height="wrap_content"/>
</LinearLayout>

Model.Java: (Es ist die POJO-Klasse)

package com.checkboxlistview;

public class Model {

private String name;
private boolean selected;
private String address;

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public void setName(String name) {
    this.name = name;
}

public Model(String name) {
    this.name = name;
}

public String getName() {
    return name;
}

public boolean isSelected() {
    return selected;
}

public void setSelected(boolean selected) {
    this.selected = selected;
}

}

MyAdapter.Java: (Dies wird verwendet, um die Ansicht in der Listenansicht mit dem Konverter und Halter zu halten.)

package com.checkboxlistview;

import Java.util.List;
import Android.app.Activity;
import Android.text.Editable;
import Android.text.TextWatcher;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ArrayAdapter;
import Android.widget.CheckBox;
import Android.widget.CompoundButton;
import Android.widget.EditText;
import Android.widget.TextView;

public class MyAdapter extends ArrayAdapter<Model> implements TextWatcher {

private final List<Model> list;
private final Activity context;
int listPosititon;

public MyAdapter(Activity context, List<Model> list) {
    super(context, R.layout.row, list);
    this.context = context;
    this.list = list;
}

static class ViewHolder {
    protected TextView text;
    protected CheckBox checkbox;
    protected EditText address;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    listPosititon = position;
    ViewHolder viewHolder = null;
    if (convertView == null) {
        LayoutInflater inflator = context.getLayoutInflater();
        convertView = inflator.inflate(R.layout.row, null);
        viewHolder = new ViewHolder();
        viewHolder.text = (TextView) convertView.findViewById(R.id.label);
        viewHolder.checkbox = (CheckBox) convertView
                .findViewById(R.id.check);
        viewHolder.address = (EditText) convertView
                .findViewById(R.id.txtAddress);
        viewHolder.checkbox
                .setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
int getPosition = (Integer) buttonView.getTag(); 
//Here we get the position that we have  set for the checkbox using setTag.
list.get(getPosition).setSelected(
buttonView.isChecked()); 
// Set the value of checkbox to maintain its state.
}
});
        viewHolder.address.addTextChangedListener(this);

        convertView.setTag(viewHolder);
        convertView.setTag(R.id.label, viewHolder.text);
        convertView.setTag(R.id.check, viewHolder.checkbox);
        convertView.setTag(R.id.txtAddress, viewHolder.address);
    } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.checkbox.setTag(position); // This line is important.

    viewHolder.text.setText(list.get(position).getName());
    viewHolder.checkbox.setChecked(list.get(position).isSelected());
    if (list.get(position).getAddress() != null) {
        viewHolder.address.setText(list.get(position).getAddress() + "");
    } else {
        viewHolder.address.setText("");
    }

    return convertView;
}

@Override
public void afterTextChanged(Editable s) {
    list.get(listPosititon).setAddress(s.toString());
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
        int arg3) {
    // TODO Auto-generated method stub

}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
    // TODO Auto-generated method stub

}
}

MainActivity.Java (Dies ist die Aktivität):

package com.checkboxlistview;

import Java.util.ArrayList;
import Java.util.List;

import Android.app.Activity;
import Android.os.Bundle;
import Android.view.View;
import Android.widget.ArrayAdapter;
import Android.widget.Button;
import Android.widget.ListView;
import Android.widget.Toast;

public class MainActivity extends Activity { 
 ListView listView;
 Button btnSave;
    ArrayAdapter<Model> adapter;
    List<Model> list = new ArrayList<Model>();

    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        listView = (ListView) findViewById(R.id.my_list);
        btnSave = (Button)findViewById(R.id.btnSave);
        adapter = new MyAdapter(this,getModel());
        listView.setAdapter(adapter);
        btnSave.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                for (int i = 0; i < list.size(); i++) {
                    Toast.makeText(getBaseContext(), "Name : "+list.get(i).getName() +" Selected: "+list.get(i).isSelected(), Toast.LENGTH_SHORT).show();

                }
            }
        });
    }


    private List<Model> getModel() {
        list.add(new Model("Linux"));
        list.add(new Model("Windows7"));
        list.add(new Model("Suse"));
        list.add(new Model("Eclipse"));
        list.add(new Model("Ubuntu"));
        list.add(new Model("Solaris"));
        list.add(new Model("Android"));
        list.add(new Model("iPhone"));
        list.add(new Model("Java"));
        list.add(new Model(".Net"));
        list.add(new Model("PHP"));
        return list;
    }
}

Der Code enthält keinen Fehler. Es läuft gut. Ich könnte die Position des Kontrollkästchens beibehalten und an derselben Position anzeigen, selbst wenn ich nach oben und unten scrolle. Aber ich konnte den EditText-Wert nicht richtig abrufen und einstellen. Bitte hilf mir. Danke im Voraus.

10
Mathew

dies erreichen Sie mit der benutzerdefinierten Listenansicht.

das Beispiel für Listenansicht mit Edittext ist hier

5
Munish Kapoor

Behalten Sie einfach viewHolder.address.setTag (Position) bei und es funktioniert perfekt.

Adapterklasse:

package com.qzick.adapter;

import Java.util.ArrayList;
import Android.content.Context;
import Android.text.Editable;
import Android.text.TextWatcher;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.View.OnClickListener;
import Android.view.ViewGroup;
import Android.widget.BaseAdapter;
import Android.widget.CheckBox;
import Android.widget.CompoundButton;
import Android.widget.CompoundButton.OnCheckedChangeListener;
import Android.widget.EditText;
import Android.widget.TextView;

import com.example.qzick.R;
import com.qzick.model.Get_All_Class_Model;

public class Get_Class_Adapter extends BaseAdapter {
    protected ArrayList<Get_All_Class_Model> get_class_details;
    LayoutInflater inflater;
    Context context;
    private int x = 1;

    public Get_Class_Adapter(Context context,
            ArrayList<Get_All_Class_Model> get_class_details) {
        this.get_class_details = get_class_details;
        this.inflater = LayoutInflater.from(context);
        this.context = context;

    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return get_class_details.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return get_class_details.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = this.inflater.inflate(
                    R.layout.activity_adapter_class_ll, parent, false);

            holder.textclass = (TextView) convertView
                    .findViewById(R.id.text_class_ll);

            holder.txtid = (TextView) convertView.findViewById(R.id.text_id_ll);

            holder.checkclass = (CheckBox) convertView
                    .findViewById(R.id.check_class_LL);

            holder.edtsection = (EditText) convertView
                    .findViewById(R.id.edttxt_addsection_ll);

            holder.checkclass
                    .setOnCheckedChangeListener(new OnCheckedChangeListener() {

                        @Override
                        public void onCheckedChanged(CompoundButton buttonView,
                                boolean isChecked) {

                            int getPosition = (Integer) buttonView.getTag();

                            get_class_details.get(getPosition).setChecked(
                                    buttonView.isChecked());

                            notifyDataSetChanged();
                        }
                    });

            convertView.setTag(holder);
            convertView.setTag(R.id.check_class_LL, holder.checkclass);
            convertView.setTag(R.id.edttxt_addsection_ll, holder.edtsection);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }

        holder.checkclass.setTag(position);
        holder.edtsection.setTag(position);

        holder.edtsection.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {
                int pos = (Integer) holder.edtsection.getTag();

                get_class_details.get(pos).setEdtsections(s.toString());

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        });

        holder.txtid.setText(get_class_details.get(position).getId());
        holder.textclass.setText(get_class_details.get(position).getText());
        holder.edtsection.setText(get_class_details.get(position)
                .getEdtsections());

        holder.textclass.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                x++;

                if (x % 2 == 0) {
                    holder.checkclass.setChecked(false);

                } else {
                    holder.checkclass.setChecked(true);
                }

            }
        });

        holder.checkclass.setChecked(get_class_details.get(position)
                .isChecked());
        return convertView;
    }

    private class ViewHolder {
        TextView textclass, txtid;`enter code here`
        CheckBox checkclass;
        EditText edtsection;
    }
}
0
Vikas