Autore Topic: Listview multiple choice con custom adapter/view  (Letto 2645 volte)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Listview multiple choice con custom adapter/view
« il: 04 Giugno 2010, 13:22:51 CEST »
Sto cercando di capire come utilizzare una listview in modalità multiple choice ma con un adapter/view custom e devo dire che non mi sembra molto semplice.
Se qualcuno ci ha smanettato ed è riuscito a crearne una che posti pure un tutorial, visto che sembrerebbe una cosa davvero poco documentata ed esemplificata :)

Ovviamente non intendo un emulazione di tale funzionalità, ma un implementazione che permetta di utilizzare tutti i vari metodi messi a disposizione dalla classe ListView :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #1 il: 20 Giugno 2010, 22:28:55 CEST »
uppino  :-(

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Listview multiple choice con custom adapter/view
« Risposta #2 il: 21 Giugno 2010, 09:43:15 CEST »
Se ti interessa solo la selezione multipla puoi usare nel setListAdapter questo layout standard: android.R.layout.simple_list_item_multiple_choice
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #3 il: 21 Giugno 2010, 19:49:00 CEST »
A me serve proprio utilizzare una custom view (che non differisce molto da quella che mi hai segnalato, serve solo aggiungere un'icona a sx del testo). Però non riesco a venirne a capo.

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Listview multiple choice con custom adapter/view
« Risposta #4 il: 21 Giugno 2010, 21:57:12 CEST »
Non ti basta usare questo tutorial: [medio] ListView con layout personalizzato tramite un SimpleAdapter - Android Developers Italia
e in piú piazzargli una checkbox?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #5 il: 21 Giugno 2010, 23:05:39 CEST »
Non ti basta usare questo tutorial: [medio] ListView con layout personalizzato tramite un SimpleAdapter - Android Developers Italia
e in piú piazzargli una checkbox?

Beh forse una CheckedTextView, domani cmq provo :) grazie per l'idea :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #6 il: 22 Giugno 2010, 21:32:45 CEST »
Fatto alcune prove senza successo.
Sono andato a leggere sul git il codice della classe ListView e ho visto che nel codice a un certo punto c'è questo:
Codice (Java): [Seleziona]
       
        if (mChoiceMode != CHOICE_MODE_NONE && mCheckStates != null) { 
            if (child instanceof Checkable) {
       
                ((Checkable) child).setChecked(mCheckStates.get(position));
       
            }
        }

Io sono ragionevolmente certo che sta qui il problema... la mia custom view non è sicuramente un'istanza di Checkable infatti se clicco sulla riga la checkbox non viene selezionata (come invece dovrebbe essere).



Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Listview multiple choice con custom adapter/view
« Risposta #7 il: 22 Giugno 2010, 21:50:00 CEST »
che tipo di adapter stai usando? puoi postare l'xml degli items?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #8 il: 22 Giugno 2010, 21:53:39 CEST »
L'adapter  quello che ho postato nel tutorial che ho realizzazato.

L'xml dell'item è il seguente:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="60dip"
        android:padding="5dip">


        <ImageView android:id="@+id/personImage"
                android:layout_width="50dip" android:layout_height="50dip">
        </ImageView>


        <TextView android:text="Nome" android:layout_marginLeft="5dip"
                android:textAppearance="?android:attr/textAppearanceLarge" android:id="@+id/personName"
                android:layout_toRightOf="@id/personImage" android:layout_width="wrap_content"
                android:layout_height="wrap_content"></TextView>

        <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical" android:layout_width="fill_parent"
                android:layout_height="?android:attr/listPreferredItemHeight"
                android:textAppearance="?android:attr/textAppearanceLarge"
                android:gravity="center_vertical" android:paddingLeft="6dip"
                android:paddingRight="6dip" android:checkMark="?android:attr/listChoiceIndicatorMultiple"
                android:id="@android:id/text1" />
       
       
</RelativeLayout>

Ora però sto scrivendo una Custom view del genere, anche se non ho idea se funzionerà...
Codice (Java): [Seleziona]
import android.content.Context;
import android.util.AttributeSet;
import android.widget.Checkable;
import android.widget.CheckedTextView;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MyCustomView extends LinearLayout implements Checkable {

        private Context                 context;
        private CheckedTextView checkedTextView;
        private ImageView               imageView;

        public MyCustomView ( Context context ) {
                super( context );
                this.context = context;
                initViews();
        }

        public MyCustomView ( Context context, AttributeSet attrs ) {
                super( context, attrs );
                this.context = context;
                initViews();
        }

        public boolean isChecked () {
                return checkedTextView.isChecked();
        }

        public void setChecked ( boolean checked ) {
                checkedTextView.setChecked( checked );
        }

        public void toggle () {
                checkedTextView.toggle();
        }

        public void setImage ( int resource ) {
                imageView.setImageResource( resource );
        }

        public void initViews () {
                checkedTextView = new CheckedTextView( this.context );
                imageView = new ImageView( context );
                this.addView( checkedTextView, new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) );
                this.addView( imageView, new LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT ) );
                this.setOrientation( LinearLayout.HORIZONTAL );
        }
}

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, Windows 7
Re:Listview multiple choice con custom adapter/view
« Risposta #9 il: 23 Giugno 2010, 19:12:56 CEST »
news? funziona con la classe MyCustomView che hai creato?

ho provato, e sembra veramente difficile/impossibile integrare la multiple choice mode con un custom layout.
cercando su google e stackoverflow (Multiple choice list with custom view? - Stack Overflow), alcuni dicono di mettere la checkbox con l id  android:id="@android:id/text1, come ho visto che hai provato anche tu. ma purtroppo non funziona.
sembra funzionare solo con simple_list_item_multiple_choice.xml.
questo proprio perchè usando quel layout i childs sono dei CheckedTextView (Checkable)...come hai osservato anche tu dal sorgente della listview...

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #10 il: 23 Giugno 2010, 20:08:57 CEST »
Alla fine ho optato per la gestione manuale del tutto...

Offline niko_2307

  • Nuovo arrivato
  • *
  • Post: 27
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
Re:Listview multiple choice con custom adapter/view
« Risposta #11 il: 13 Settembre 2010, 15:39:40 CEST »
come sei riuscito a risolvere?
io sto cercando di recuperare la checkbox che sta in una determinata row ma senza successo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Listview multiple choice con custom adapter/view
« Risposta #12 il: 13 Settembre 2010, 17:10:35 CEST »
Se hai un qualche problema apri un nuovo thread postando il codice.

Offline niko_2307

  • Nuovo arrivato
  • *
  • Post: 27
    • Mostra profilo
  • Dispositivo Android:
    HTC Hero
Re:Listview multiple choice con custom adapter/view
« Risposta #13 il: 13 Settembre 2010, 17:14:42 CEST »
ops...chiedo scusa....non mi ero accorto di essere nella sezione richiesta tutorial