Autore Topic: Contare gli items selezionati in una ListActivity con Custom View e Adapter  (Letto 623 volte)

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
Ciao.
Ho un problema enorme, ci sto sbattendo la testa da due giorni ma non riesco a venirne a capo.
Ho una ListActivity in cui le righe sono generate con un Layout XML personalizzato, nel quale è presente una CheckBox, una ImageView e diverse TextView.
La ListActivity viene riempita usando un custom adapter perché deve indicare diverse informazioni, mentre la checkbox mi serve per selezionare uno o più elementi: devo contare quanti sono gli elementi selezionati e, in funzione del loro numero, devo attivare o disattivare alcune funzioni della mia applicazione.
Tralasciando l'ultima questione, la domanda è: come faccio a contare gli item selezionati?

Codice Listamain.xml (la ListActivity):
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
    <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/pathlayout" android:layout_alignParentTop="true" android:gravity="center_vertical">
        <ImageButton android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:src="@drawable/folderup" android:id="@+id/lvFoldUp1"></ImageButton>
        <TextView android:layout_toRightOf="@+id/lvFoldUp1" android:layout_alignBaseline="@+id/lvFoldUp1" android:layout_alignParentTop="true" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/path1txt" android:textAppearance="?android:attr/textAppearanceMedium" android:text="@string/lv_location"></TextView>
        <TextView android:layout_toRightOf="@+id/path1txt" android:layout_alignBaseline="@+id/lvFoldUp1" android:layout_alignParentTop="true" android:text="TextView" android:layout_height="wrap_content" android:id="@+id/path1" android:ellipsize="start" android:singleLine="true" android:layout_marginLeft="5dp" android:layout_width="fill_parent" android:textAppearance="?android:attr/textAppearanceMedium"></TextView>
    </RelativeLayout>
    <ListView
    android:id="@android:id/list"
    android:layout_below="@id/pathlayout"
    android:layout_width="fill_parent" android:layout_height="fill_parent"></ListView>

   
</RelativeLayout>

Codice ListaMainRow.xml (layout per ogni singola riga):
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:orientation="horizontal" android:layout_height="wrap_content" android:gravity="top">
    <LinearLayout android:layout_width="wrap_content" android:id="@+id/linearLayout4" android:layout_height="fill_parent" android:gravity="top">
        <CheckBox android:layout_height="wrap_content" android:id="@+id/chkBox1" android:layout_width="wrap_content" android:focusable="false" android:clickable="true"></CheckBox>
    </LinearLayout>
    <LinearLayout android:layout_width="wrap_content" android:id="@+id/linearLayout3" android:layout_height="fill_parent" android:gravity="top">
        <ImageView android:src="@drawable/icn_file" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/rowIcon1" android:layout_marginTop="8dp"></ImageView>
    </LinearLayout>
    <LinearLayout android:id="@+id/linearLayout1" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content">
        <TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceMedium" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/fName1"></TextView>
        <LinearLayout android:id="@+id/linearLayout2" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="vertical">
            <TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="TextView" android:layout_width="wrap_content" android:id="@+id/lvDate"></TextView>
            <TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/textView3" android:text="TextView" android:layout_width="wrap_content"></TextView>
            <TextView android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/textView4" android:text="TextView" android:layout_width="wrap_content"></TextView>
        </LinearLayout>
    </LinearLayout>
   
</LinearLayout>

Porzioni di codice di listamain.java:
Codice (Java): [Seleziona]
package it.wisoft.zipgenius;

import java.io.File;
import java.util.ArrayList;
import java.util.Currency;
import java.util.Iterator;
import java.util.List;
import java.util.Stack;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.util.SparseBooleanArray;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.CheckBox;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.CompoundButton;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class listamain extends ListActivity {

        ( ... )

        static ListView currV;

        ( ... )

        @Override
    public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.listamain);
         
               ( ... )         

                        listamainadapter myAdapter = new listamainadapter(this,fItems);
                        setListAdapter(myAdapter);                     
                        currV = getListView();
                        currV.setChoiceMode(2);
       
        }
       

                        ( ... )
       
        static public int Getselitems(){
                int res = 0;
                int i;
                Log.i(main.LOGTAG,"COUNT: "+String.valueOf(currV.getCount()));
               
                SparseBooleanArray chk = currV.getCheckedItemPositions();
                res = chk.size();
                Log.d(main.LOGTAG,"SBA: "+String.valueOf(res));
               
                return res;
        }
       
    ( ... )    

}

Nella porzione di codice sopra riportata, "chk.size()" è sempre uguale a 0.
A questo punto ho esaurito le idee e vi chiedo. Come posso fare per contare quali items possiedono una checkbox selezionata?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Contare gli items selezionati in una ListActivity con Custom View e Adapter
« Risposta #1 il: 15 Luglio 2011, 10:36:03 CEST »
+1
ogni volta che fai un check/uncheck, prova a mettere/togliere da qualche parte (una Collection) il valore selezionato.....
alla fine ti prendi la Collection e hai tutto quello che ti serve.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Contare gli items selezionati in una ListActivity con Custom View e Adapter
« Risposta #2 il: 15 Luglio 2011, 12:42:28 CEST »
0
Se ti può interessare avevo postato una soluzione (un po' grezza per essere sincero) in questa discussione:
Problema selezione di checkbox in una lista - Android Developers Italia

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
Re:Contare gli items selezionati in una ListActivity con Custom View e Adapter
« Risposta #3 il: 18 Luglio 2011, 09:23:25 CEST »
0
ogni volta che fai un check/uncheck, prova a mettere/togliere da qualche parte (una Collection) il valore selezionato.....
alla fine ti prendi la Collection e hai tutto quello che ti serve.

Alla fine ho usato un array ma l'idea è stata utilissima :)
Grazie!