0

編集:これらすべての編集により、投稿が混乱していると思います。問題を最初から説明しようと思います。

ListView と新しい項目を追加するためのボタンを含むアクティビティがあります。リストビューの各項目は、EditText と 2 つのボタンで構成されています。問題は、新しいアイテムを追加すると、EditTexts 内のテキストが初期値に復元されることです...

私は新しいアイテムを追加しています:

adapter.add(new Contacto(""));
adapter.notifyDataSetChanged();

「Contacto」は、arrayList で使用しているクラスの名前です。

@Iftikar Urrhman Khan は addTextChangedListener を使用するように提案しましたが、方法がわかりません。

これは私のcustomadapterのコードです:

import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.provider.ContactsContract;
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.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;

public class ContactsArrayAdapter extends ArrayAdapter<Contacto>{

    private ArrayList<Contacto> contactos;
    private Activity activity;

    public ContactsArrayAdapter(Activity a, int textViewResourceId, ArrayList<Contacto> contactos) {
        super(a, textViewResourceId, contactos);
        this.contactos = contactos;
        this.activity = a;
    }

    public static class ViewHolder{
        public EditText mail;
        public Button btn_contactos;
        public Button btn_delete;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View v = convertView;
        ViewHolder holder;

        final Contacto item = contactos.get(position);

        if (v == null) {
            LayoutInflater vi =
                (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.contacto, null);
            holder = new ViewHolder();
            holder.mail = (EditText) v.findViewById(R.id.txt_to);
            holder.btn_contactos = (Button) v.findViewById(R.id.btn_contacts);
            holder.btn_delete = (Button) v.findViewById(R.id.btn_delete);            
            v.setTag(holder);

            //Delete;
            holder.btn_delete.setTag(position);
            holder.btn_delete.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v){
                    int posicion = (Integer)v.getTag();
                    contactos.remove(posicion);
                    notifyDataSetChanged();
                }
            });

            //Add contacts
            holder.btn_contactos.setTag(position);
            holder.btn_contactos.setOnClickListener(new OnClickListener(){
                @Override
                public void onClick(View v){
                    //Log.d("TAG", "Botón contactos pulsado, pos: "+Integer.toString(pos));
                    ((Contactos)getContext()).setPosicion((Integer)v.getTag());

                    Intent intent =new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Email.CONTENT_URI);
                    ((Activity) v.getContext()).startActivityForResult(intent, MainActivity.act_pick_contact_mail);
                }
            });    

            //TextEdit Listener 
            holder.mail.addTextChangedListener(new TextWatcher(){
            @Override
            public void afterTextChanged(Editable arg0) {

                //holder.mail.setText(item.mail);
                //item.mail=arg0.toString();

                //int posi = (Integer)v.getTag();
                //contactos.set(posi, new Contacto(arg0.toString()));

                //contactos.get(pos).setMail(arg0.toString());

            }
            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

            }
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

            }           
            });

        }
        else holder=(ViewHolder)v.getTag();

        holder.mail.setTag(position);

        if (item != null) {
            holder.mail.setText(item.getMail());
        }

        return v;
    }
}
4

1 に答える 1