Domanda

Sto cercando di eseguire una mailing con una casella di controllo ma non posso farlo. Non so come posso implementare l'ascoltatore che dimmi se il ckeckbox è selezionato o non è selezionato.

Vado qui il mio codice per se qualcuno sa come è l'implementazione dell'ascoltatore e può aiutarmi.

Questo è il codice per ogni elemento nell'elenco:

    public class TemaRescatado {

    protected String tema;
    protected long id;
    protected Boolean selected = false;

    public TemaRescatado(String tema2, long id) {
        super();
        this.tema = tema2;
        this.id = id;
    }

    public TemaRescatado(String tema2) {
        super();
        this.tema = tema2;
    }

    public String getTema() {
        return tema;
    }

    public void setTema(String tema1) {
        this.tema = tema1;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

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

Questo è il codice per l'adattatore:

public class AdapterGenerales extends BaseAdapter {

protected Activity activity;
protected ArrayList<TemaRescatado> items;

public AdapterGenerales() {
    // TODO Auto-generated constructor stub
}

public AdapterGenerales(Activity activity, ArrayList<TemaRescatado> items) {
    this.activity = activity;
    this.items = items;
}


public int getCount() {
    return items.size();
}

public Object getItem(int arg0) {
    return items.get(arg0);
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Generamos una convertView por motivos de eficiencia
    View v = convertView;

    //Asociamos el layout de la lista que hemos creado
    if(convertView == null){
        LayoutInflater inf = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inf.inflate(R.layout.item_gen, null);
    }

    // Creamos un objeto directivo
    TemaRescatado temaResc = items.get(position);

    //Rellenamos el listview de temas
    TextView iden = (TextView) v.findViewById(R.id.textView1);
    iden.setText(temaResc.getTema());

    // Retornamos la vista
    return v;
}

@Override
public long getItemId(int position) {
    return items.get(position).getId();

}

}
.

E questo è il codice per l'attività:

public class SeleccionTest extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_seleccion_test);

    ListView lista = (ListView) findViewById(R.id.listView1);
    final ArrayList<TemaRescatado> arraydirGen = new ArrayList<TemaRescatado>();
    TemaRescatado temaRescGen;

    temaRescGen = new TemaRescatado("General1",1);
    arraydirGen.add(temaRescGen);
    temaRescGen = new TemaRescatado("General2",2);
    arraydirGen.add(temaRescGen);
    temaRescGen = new TemaRescatado("General3",3);
    arraydirGen.add(temaRescGen);
    temaRescGen = new TemaRescatado("General4",4);
    arraydirGen.add(temaRescGen);
    temaRescGen = new TemaRescatado("General5",5);
    arraydirGen.add(temaRescGen);
    temaRescGen = new TemaRescatado("General6",6);
    arraydirGen.add(temaRescGen);

    final AdapterGenerales adapter = new AdapterGenerales(this, arraydirGen);
    lista.setAdapter(adapter);


    lista.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            Log.i("Seleccionado - Listener", "pos: "+position +"  id:"+id);              
            return true;
        }
    });

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.seleccion_test, menu);
    return true;
}

}
.

the item_gen.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/checkBox1"
    android:layout_alignBottom="@+id/checkBox1"
    android:layout_toRightOf="@+id/checkBox1"
    android:text="@string/vacia" />

<CheckBox
    android:id="@+id/checkBox1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="50dp"
    android:text="@string/vacia" />

</RelativeLayout>
.

È stato utile?

Soluzione

In getView(...) devi usare compostibutton.oncheckedchangelistener provaPer utilizzare Pattern del phapholder

Codice Snippet

viewHolder.checkbox = (CheckBox) view.findViewById(R.id.checkBox1);
     viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
              TemaRescatado element = (TemaRescatado) viewHolder.checkbox
                  .getTag();
              element.setSelected(buttonView.isChecked());

            }
          });
.

Altri suggerimenti

Controllare questo tutorial spiega il modello del titolare in ListView tutorial

Ricorda inoltre che è necessario assegnare qualsiasi onclickListener o OnCheckListener in GetView () Metodo del tuo adattatore

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top