CERCA
PER MODELLO
FullScreen Chatbox! :)

Utente del giorno: carotix con ben 2 Thanks ricevuti nelle ultime 24 ore
Utente della settimana: 9mm con ben 7 Thanks ricevuti negli ultimi sette giorni
Utente del mese: 9mm con ben 31 Thanks ricevuti nell'ultimo mese

Pagina 1 di 2 12 ultimoultimo
Ultima pagina
Visualizzazione dei risultati da 1 a 10 su 19
Discussione:

[Facile] ListView con Custom Adapter

Se questa discussione ti è stata utile, ti preghiamo di lasciare un messaggio di feedback in modo che possa essere preziosa in futuro anche per altri utenti come te!
  1. #1
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    [Facile] ListView con Custom Adapter

    Livello di difficoltà: facile.
    Versione target SDK utilizzata: 19.
    Versione minima SDK: 8.

    In questo tutorial spiegherò come realizzare una ListView con un adattatore personalizzato, in base alle proprie esigenze. Per questa guida l'adapter sarà composto semplicemente da una ImageView e due TextView. Iniziamo!

    Per prima cosa è necessario creare il layout collegato all'activity principale, che avrà come unico elemento una semplice ListView. Andiamo quindi in /res/layout/ apriamo il file activity_main.xml e inseriamo al suo interno:



    Quindi rechiamoci nell'Activity principale in /src/ e apriamo MainActivity.java. Inseriamo:



    Le prime tre righe di codice prevedono la dichiarazione di due array di stringhe (String[]), l'Adapter (che creeremo tra poco) e la ListView. Per creare l'Adapter torniamo nuovamente in /res/layout/ e creiamo un nuovo file che chiameremo adapter.xml. Inseriamo:



    Quindi, di nuovo in /src/ creiamo una classe che chiamiamo Adapter.java, nella quale inseriremo:



    Come vedete il costruttore prevede tre parametri: il contesto, l'array di stringhe dei testi e dei sotto-testi. Il metodo getView() è molto importante. Esso si occupa della gestione del singolo elemento dalla lista. I parametri al suo interno sono: la posizione, view e parent. Soffermiamoci su questi ultimi due: il parametro view, se opportunamente ottimizzato ci permette di rendere la lista molto fluida nello scroll ed evitare quindi i fastidiosi lag dovuti, appunto, alla mancata ottimizzazione. In maniera spicciola, view ci consente di riciclare l'eventuale View che anzichè essere "rigenerata" viene riciclata, ragion per cui viene fatto il controllo. Se è nulla, tramite l'operazione di Inflating la creiamo, altrimenti la ricicliamo. Il parametro parent è il contenitore avente il compito di raccogliere gli elementi generati dal metodo getView(). Generalmente è la ListView stessa. L'oggetto Holder consente di memorizzare il riferimento alle View in ogni singola riga della lista. Tramite il metodo setTag() associamo l'oggetto Holder alla View, per poi riottenerlo col getTag(). Questi piccoli accorgimenti nel complesso rendono la lista efficiente, evitando sprechi di risorse, di memoria, oltre che evitano il presentarsi di lag/impuntamenti.

    Questo è tutto. Per ulteriori chiarimenti potete scrivere in questa discussione. Un ringraziamento speciale all'utente supertommino.
    Ultima modifica di Crotan; 31-01-14 alle 19:05

  2. I seguenti 2 Utenti hanno ringraziato Crotan per il post:

    KlaasMad (31-01-14),wuby (29-05-14)

  3.  
  4. #2
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    Riservato per future aggiunte.

  5. #3
    Baby Droid


    Registrato dal
    Sep 2014
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Al click sulla riga non è chiaro però a quale activity della mia app si viene indirizzati. Come si può fare ciò ?

  6. #4
    Senior Droid


    Registrato dal
    Aug 2011
    Località
    Roma
    Messaggi
    406
    Smartphone
    Nexus 5

    Ringraziamenti
    6
    Ringraziato 32 volte in 29 Posts
    Predefinito

    Il codice quando fai tap su una riga ti mostra in un Toast dice quale riga hai premuto, non viene lanciata nessuna activity.

  7. #5
    Baby Droid


    Registrato dal
    Sep 2014
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Per lanciare una activity specifica come faccio?
    Ho inserito più Intent in corrispondenza di ogni activity da visitare ma mi visita sempre la medesima activity. Posso spostare il codice?

  8. #6
    Baby Droid


    Registrato dal
    Sep 2014
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Scusate postare...

  9. #7
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    @sebastiano74, posta il codice.

  10. #8
    Baby Droid


    Registrato dal
    Sep 2014
    Messaggi
    7

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    di seguito il codice Java:

    All'interno del metodo OnCreate


    String[] accessori = { "Wind.it", "Digital Store Wind", "Play Store", "eBay", "Amazon", "Samsung Store", "Apple Store", "Windows Store", "Disney Store"};

    ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_ list_item_1,accessori);
    ListView lv= (ListView) findViewById(R.id.elencoaccessori);
    lv.setAdapter(adapter);

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override
    public void onItemClick(AdapterView<?> adattatore, final View componente, int pos, long id) {
    //recupero il titolo memorizzato nella riga tramite l'ArrayAdapter
    final String titolo = (String) adattatore.getItemAtPosition(pos);
    //al click compare il testo del titolo della riga per qualche secondo
    Toast.makeText(getApplicationContext(), titolo, Toast.LENGTH_SHORT).show();

    Fino a qui tutto ok, funziona tutto
    Adesso vorrei inserire su ogni riga visualizzata un link di collegamento ad un'altra MainActivity.
    Dopo il Toast ho inserite il seguente codice:

    Intent visit_wind = new Intent(MainActivity_3_canali.this, MainActivity_wind.class);
    startActivity(visit_wind);

    Ma ho notato che in questo modo tutte le righe della mia ListView mi portano sulla MainActivity_wind.
    Come posso indirizzare ogni singola riga della LisView alla sua MainActivity specifica???

  11. #9
    Baby Droid


    Registrato dal
    Jun 2015
    Messaggi
    3

    Ringraziamenti
    0
    Ringraziato 0 volte in 0 Posts
    Predefinito

    Ma come fare se i valori che devo inserire nella listview sono dei dati presi nel DB?

  12. #10
    Androidiani Power User L'avatar di Crotan


    Registrato dal
    Jul 2013
    Località
    Roma
    Messaggi
    1,265
    Smartphone
    Redmi Note 9 Pro

    Ringraziamenti
    401
    Ringraziato 1,445 volte in 626 Posts
    Predefinito

    Basta avere un metodo che restituisce un Array con i valori recuperati dal Database SQLite e passare quello all'Adapter. Qui trovi istruzioni su come creare questo metodo: How to retrieve data from sqlite database in android and display it in TextView - Stack Overflow.

Pagina 1 di 2 12 ultimoultimo
Ultima pagina

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire risposte
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Torna su
Privacy Policy