Autore Topic: CheckBox dinamiche  (Letto 568 volte)

Offline DarDev

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
  • Sistema operativo:
    Windows 7/ MAC OSX
CheckBox dinamiche
« il: 02 Settembre 2013, 17:22:42 CEST »
0
Ciao a tutti Ragazzi ,

Volevo chiedervi come utilizzare delle checkBox in maniera dinamica...mi spiego meglio
Carico per ogni riga del mio JsonArray una checkBox.....
Scarico tutto e fino a li nessun problema ..vedo tutte le check caricate.....
Il problema nasce quando vado a cliccare su una qualsiasi....infatti proprio nel click viene sempre e solo chiamata l'ultima check caricata...
cioè clicco sulla prima e viene ceccata l ultima... e cosi per tutte le check..!!!!

Vi posto  il pezzo di codice codice:

   for (int i = 0; i < jarrAccessori.length(); i++)
         {
CheckBox chk = new CheckBox(gd.getApplicationContext());      
chk.setPadding(20, 75*i, 0, 0);
layout.addView(chk);
LinearAcc.addView(layout);
..........

Quindi a me servirebbe capire come renderle tutte cliccabili e se su ogni check posso assegnare un tag... per capire poi quale chek ho cliccato....!!! Grazie DarDev

Offline matttt

Re:CheckBox dinamiche
« Risposta #1 il: 02 Settembre 2013, 20:07:39 CEST »
0
Bisognerebbe vedere tutto il getView che hai implementato per capire il problema.

Ti incollo come faccio io in una mia app (un po' modificato diciamo):
Codice (Java): [Seleziona]
@Override
public View getView( int position, View convertView, ViewGroup parent )
{
        ViewHolder holder = null;

        if( convertView == null )
        {
                LayoutInflater inflater = LayoutInflater.from( mContext );
                convertView = inflater.inflate( R.layout.my_item, null );

                holder = new ViewHolder();
                holder.checkbox = (CheckBox) convertView.findViewById( R.id.checkbox );
                holder.text1 = (TextView) convertView.findViewById( R.id.text1 );
                holder.text2 = (TextView) convertView.findViewById( R.id.text2 );
                convertView.setTag( holder );

                holder.checkbox.setOnClickListener( new View.OnClickListener() {
                        public void onClick( View v )
                        {
                                CheckBox cb = (CheckBox) v;
                                MyObject obj = (MyObject) cb.getTag();
                                //if( cb.isChecked() ) ;        // ...
                        }
                });
        }
        else holder = (ViewHolder) convertView.getTag();

        MyObject o = this.getItem( position );
        holder.text1.setText( o.getText1() );
        holder.text2.setText( o.getText2() );
        holder.checkbox.setTag( o );
        holder.checkbox.setChecked( o.getCheckbox() );

        return convertView;
}

E ViewHolder:
Codice (Java): [Seleziona]
private class ViewHolder
{
        protected CheckBox checkbox;
        protected TextView text1;
        protected TextView text2;
}
Le mie apps su Google Play Store:

Offline DarDev

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
  • Sistema operativo:
    Windows 7/ MAC OSX
Re:CheckBox dinamiche
« Risposta #2 il: 03 Settembre 2013, 09:34:40 CEST »
0
Guarda non so se puo esserti utile .... creo tutto dinamicamente nell OnPostexecute ....poi nel main richiamo solo la classe asincrona....

Codice (Java): [Seleziona]
public void onPostExecute(Void unused) {
                       
                        for (int i = 0; i < jarrAccessori.length(); i++)
                        {
                                try {
                                                TextView Descrizione = new TextView(gd.getApplicationContext());
                                                TextView Prezzo = new TextView(gd.getApplicationContext());
                                                Prezzo.setText(jarrAccessori.getJSONObject(i).getString("Prezzo"));
                                                Descrizione.setText(jarrAccessori.getJSONObject(i).getString("Descrizione"));
                                       
                                               
                                                RelativeLayout layout = new RelativeLayout(Preventivo.this);
                                                layout.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT ));
                                               
                                                CheckBox chk = new CheckBox(gd.getApplicationContext());
                                               
                                               
                                                chk.setPadding(20, 75*i, 0, 0);
                                                Prezzo.setPadding(550, 37*i, 20, 0);
                                                Prezzo.setTextSize(10);
                                                Descrizione.setTextSize(10);
                                                Descrizione.setPadding(50, 37*i, 0, 0);
                                                layout.addView(chk);
                                                layout.addView(Descrizione);
                                                layout.addView(Prezzo);
                                               
                                               
                                               
                                                LinearAcc.addView(layout);

XML:

Codice (Java): [Seleziona]
<ScrollView
        android:id="@+id/scrollView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/relativeLayout3" >

        <RelativeLayout
            android:id="@+id/RelativeLayout1"
            android:layout_width="358dp"
            android:layout_height="486dp"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_alignParentTop="true"
                android:layout_marginLeft="10dp"
                android:layout_marginTop="20dp"
                android:text="Durata :"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/refreshDurata"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="25dp"
                android:text="Dove :"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/textView6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/RefreshCat"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="19dp"
                android:text="Prezzo:"
                android:textAppearance="?android:attr/textAppearanceMedium" />

            <TextView
                android:id="@+id/txtDurata"
                android:layout_width="wrap_content"
                android:layout_height="12dp"
                android:layout_alignBottom="@+id/textView2"
                android:layout_toRightOf="@+id/txtSede"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#c00" />

            <ImageButton
                android:id="@+id/refreshDurata"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/txtDurata"
                android:layout_alignLeft="@+id/txtPrezzo"
                android:background="@drawable/btnaggiorna"
                android:src="@drawable/btnaggiorna" />

            <ImageButton
                android:id="@+id/RefreshCat"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignBottom="@+id/textView4"
                android:layout_alignLeft="@+id/refreshDurata"
                android:background="@drawable/btnaggiorna"
                android:src="@drawable/btnaggiorna" />

            <TextView
                android:id="@+id/txtSede"
                android:layout_width="wrap_content"
                android:layout_height="12dp"
                android:layout_alignTop="@+id/RefreshCat"
                android:layout_marginLeft="47dp"
                android:layout_marginTop="20dp"
                android:layout_toRightOf="@+id/textView2"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#c00" />

            <TextView
                android:id="@+id/textView8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignLeft="@+id/RefreshCat"
                android:layout_alignTop="@+id/textView6"
                android:layout_marginRight="36dp"
                android:text="€"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#c00" />

            <RelativeLayout
                android:id="@+id/RelativeACC"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="180dp" >
            </RelativeLayout>

            <TextView
                android:id="@+id/txtPrezzo"
                android:layout_width="wrap_content"
                android:layout_height="14dp"
                android:layout_alignParentRight="true"
                android:layout_alignTop="@+id/textView8"
                android:layout_marginRight="66dp"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:textColor="#c00" />

            <Button
                android:id="@+id/btnPrenotazione"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="70dp"
                android:layout_marginTop="400dp"
                android:background="@drawable/pulsante"
                android:text="RICHIESTA PRENOTAZIONE"
                android:textSize="15sp" />

        </RelativeLayout>
    </ScrollView>
Come vedi ho uno scroll con dentro un relativeLayout....
Da codice creo nel oNPost un altro layout sempre Relative e lo aggiungo alla vista del Relative già inserito nello scroll....(scusa la confusione)
Grazie mille DarDev

Offline matttt

Re:CheckBox dinamiche
« Risposta #3 il: 03 Settembre 2013, 12:32:28 CEST »
+1
Ok... ma col Jeson Array :) hai solo una serie di valori.
Poi per presentarli non è molto efficiente creare dinamicamente le view...
Mi sembra di capire che hai una lista di qualche tipo con checkbox e almeno un testo. Se è effettivamente così ti conviene utilizzare una ListActivity o una ListView e crearti un tuo adapter (con codice simile a quello che ho postato io) in modo da disegnare e gestire gli elementi della lista a tuo piacimento.

Nell'SDK android sono inclusi una serie di esempi. Uno di quelli dovrebbe chiamarsi API demos nel quale trovi (tra le varie cose) anche oltre una decina di esempio di ListView tra cui uno con checkbox che penso faccia al caso tuo.
Le mie apps su Google Play Store:

Offline DarDev

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG G2
  • Sistema operativo:
    Windows 7/ MAC OSX
Re:CheckBox dinamiche
« Risposta #4 il: 09 Settembre 2013, 15:37:00 CEST »
0
Grazie per le tue risposte ...!
Se riesco a risolvere posto il codice!!
Grazie DarDev