Android: ListView elements with multiple clickable buttons

后端 未结 8 1172
天命终不由人
天命终不由人 2020-11-22 01:58

I\'ve a ListView where every element in the list contains a TextView and two different Buttons. Something like this:

ListView
------------------         


        
8条回答
  •  一生所求
    2020-11-22 02:24

    I am not sure about be the best way, but works fine and all code stays in your ArrayAdapter.

    package br.com.fontolan.pessoas.arrayadapter;
    
    import java.util.List;
    
    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.ArrayAdapter;
    import android.widget.EditText;
    import android.widget.ImageView;
    import br.com.fontolan.pessoas.R;
    import br.com.fontolan.pessoas.model.Telefone;
    
    public class TelefoneArrayAdapter extends ArrayAdapter {
    
    private TelefoneArrayAdapter telefoneArrayAdapter = null;
    private Context context;
    private EditText tipoEditText = null;
    private EditText telefoneEditText = null;
    private ImageView deleteImageView = null;
    
    public TelefoneArrayAdapter(Context context, List values) {
        super(context, R.layout.telefone_form, values);
        this.telefoneArrayAdapter = this;
        this.context = context;
    }
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.telefone_form, parent, false);
    
        tipoEditText = (EditText) view.findViewById(R.id.telefone_form_tipo);
        telefoneEditText = (EditText) view.findViewById(R.id.telefone_form_telefone);
        deleteImageView = (ImageView) view.findViewById(R.id.telefone_form_delete_image);
    
        final int i = position;
        final Telefone telefone = this.getItem(position);
        tipoEditText.setText(telefone.getTipo());
        telefoneEditText.setText(telefone.getTelefone());
    
        TextWatcher tipoTextWatcher = new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                telefoneArrayAdapter.getItem(i).setTipo(s.toString());
                telefoneArrayAdapter.getItem(i).setIsDirty(true);
            }
        };
    
        TextWatcher telefoneTextWatcher = new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                telefoneArrayAdapter.getItem(i).setTelefone(s.toString());
                telefoneArrayAdapter.getItem(i).setIsDirty(true);
            }
        };
    
        tipoEditText.addTextChangedListener(tipoTextWatcher);
        telefoneEditText.addTextChangedListener(telefoneTextWatcher);
    
        deleteImageView.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                telefoneArrayAdapter.remove(telefone);
            }
        });
    
        return view;
    }
    
    }
    

提交回复
热议问题