Autore Topic: icone ListView  (Letto 1256 volte)

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
icone ListView
« il: 24 Ottobre 2011, 10:44:51 CEST »
0
Salve a tutti, sono nuovo nell'ambiente android però grazie a questo forum sto risolvendo un pò di problemi legati alla mia inesperienza...
Mi si è presentato un problema relativo alle ListView... ho creato infatti una ListView che si genera con un adapter in base ad un array di stringhe da me inserito...Sono riuscito persino ad intercettare i click facendo visualizzare ad ogni click su una riga un messaggio di toast con la stessa scritta della riga... adesso sorge il problema di voler aggiungere delle immagini accanto ad ogni riga!! che metodo devo utilizzare?? Per essere più chiaro posto qualche riga di codice:

Questo è il mio file java principale in cui c'è tutto:

Codice (Java): [Seleziona]
package it.android.prova3;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.TextView;;
 
public class prova3Activity extends ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        String[] arrayData = getResources().getStringArray(R.array.array_data);
        setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arrayData));
 
        ListView listaV = getListView();
    //Abilita il filtro per trovare un elemento digitando le prime lettere
        listaV.setTextFilterEnabled(true);
       

   
       
       listaV.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // Quando cliccato visualizza un Toast col nome selezionato
                Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
            }
          });
 
    }
   
 }

Questo è il file main.xml, :

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:background="@color/red">
<TextView  
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:text="@string/hello"
   />
</LinearLayout>

Questa infine è la schermata che mi visualizza quando avvio l'applicazione:



Uploaded with ImageShack.us

Vorrei visualizzare un icona diversa accanto ad ogni scritta della riga, possibilmente a sinistra delle scritte...le immagini ce le ho già e so dove metterle (nella cartella drawable) ma non so che metodo usare per poterle settare accanto ad ogni riga.
Se poi sapete anche come si crea un array con gli ID delle immagini in modo da non dover usare il metodo per settare le immagini per ogni riga ve ne sono grato...Vi ringrazio per ogni eventuale risposta;

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • 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:icone ListView
« Risposta #1 il: 24 Ottobre 2011, 11:11:55 CEST »
0
Ciao Sgaglio88,
potresti usare un SimpleAdapter.

dai un occhiata qui:
[medio] ListView con layout personalizzato tramite un SimpleAdapter - Android Developers Italia

Puoi tralasciare la parte della classe Person nel tuo caso, oppure puoi creati un altra classe

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:icone ListView
« Risposta #2 il: 24 Ottobre 2011, 11:58:16 CEST »
0
ok grazie Qlimax, resta il problema di farlo interagire con i propri click, con che metodo si deve fare?? io lo avevo fatto ma non so se si può riutilizzare con il tuo esempio... attendo una tua risposta.
Ancora grazie. ;-)

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • 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:icone ListView
« Risposta #3 il: 24 Ottobre 2011, 12:10:53 CEST »
0
Prova con qualcosa del genere:
Codice (Java): [Seleziona]
listView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView personNameTextView=(TextView)view.findViewById(R.id.personName);  
                Toast.makeText(getApplicationContext(), personNameTextView.getText(), Toast.LENGTH_SHORT).show();
            }
});

Adattalo con gli id del tuo layout ;)

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:icone ListView
« Risposta #4 il: 24 Ottobre 2011, 13:22:29 CEST »
0
ho provato ad adattare il metodo setOnItemClickListener() al tuo programma ma mi da un pò di errori, alcuni sono riuscito a risolverli ma mi si presenta questo errore che non so come risolvere (guarda se il metodo l'ho messo al posto giusto, l'errore che mi si presenta l'ho commentato):

Codice (Java): [Seleziona]
package ch.egsolutions.simpleadapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView;
import android.view.View;
import android.widget.TextView;

public class Demo extends Activity {
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
        ArrayList<Person> personList=new ArrayList<Person>(); //lista delle persone che la listview visualizzerÃ
       
       
        Person [] people={
                        new Person("Anna","Falchi",R.drawable.creep_1),
                        new Person("Cameron", "Diaz", R.drawable.creep_2),
                        new Person("Jessica","Alba",R.drawable.creep_3),
                        new Person("Manuela","Arcuri",R.drawable.creep_4)};
       
        //riempimento casuale della lista delle persone
        Random r=new Random();
        for(int i=0;i<100;i++){
                personList.add(people[r.nextInt(people.length)]);
        }
       
       
       
        //Questa è la lista che rappresenta la sorgente dei dati della listview
        //ogni elemento è una mappa(chiave->valore)
        ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
       
       
        for(int i=0;i<personList.size();i++){
                Person p=personList.get(i);// per ogni persona all'inteno della ditta
               
                HashMap<String,Object> personMap=new HashMap<String, Object>();//creiamo una mappa di valori
               
                personMap.put("image", p.getPhotoRes()); // per la chiave image, inseriamo la risorsa dell immagine
                personMap.put("name", p.getName()); // per la chiave name,l'informazine sul nome
                personMap.put("surname", p.getSurname());// per la chiave surnaname, l'informazione sul cognome
                data.add(personMap);  //aggiungiamo la mappa di valori alla sorgente dati
        }
       
       
        String[] from={"image","name","surname"}; //dai valori contenuti in queste chiavi
        int[] to={R.id.personImage,R.id.personName,R.id.personSurname};//agli id dei layout
       
        //costruzione dell adapter
        SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        data,//sorgente dati
                        R.layout.person_item, //layout contenente gli id di "to"
                        from,
                        to);
       
        //utilizzo dell'adapter
        ((ListView)findViewById(R.id.personListView)).setAdapter(adapter);
   
/* qui mi dà errore e mi scrive: Cannot make a static reference to the non-static method setOnItemClickListener(AdapterView.OnItemClickListener) from the type AdapterView<ListAdapter> */    
 
 ListView.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView personNameTextView=(TextView)view.findViewById(R.id.personName);  
                Toast.makeText(getApplicationContext(), personNameTextView.getText(), Toast.LENGTH_SHORT).show();
            }
});
   
    }
   
}

Se riesco a far funzionare il tuo programma riuscendo ad intercettare i click poi so adattare i miei dati a questo codice quindi spero potrai darmi una mano :) grazie in anticipo!!

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • 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:icone ListView
« Risposta #5 il: 24 Ottobre 2011, 13:33:53 CEST »
0
l'errore è questo:
Codice (Java): [Seleziona]
ListView.setOnItemClickListener....
Stai chiamando un metodo non statico (setOnItemClickListener) sulla classe ListView.  Solo i metodi statici possono essere chiamati in questo modo.
Devi ottenere l'oggetto e chiamare il metodo su di esso:

Codice (Java): [Seleziona]
 
        ListView lv=(ListView)findViewById(R.id.personListView);
        lv.setAdapter(adapter);
   
     lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                TextView personNameTextView=(TextView)view.findViewById(R.id.personName);  
                Toast.makeText(getApplicationContext(), personNameTextView.getText(), Toast.LENGTH_SHORT).show();
            }
});

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:icone ListView
« Risposta #6 il: 24 Ottobre 2011, 13:44:58 CEST »
0
perfettoooo!!! va alla grande..:D grazie mille Qlimax se ho bisogno di qualcos'altro spero di poter contare su di te!!:D

Offline Allen

  • Nuovo arrivato
  • *
  • Post: 43
  • Respect: 0
    • Mostra profilo
Re:icone ListView
« Risposta #7 il: 10 Febbraio 2012, 18:01:02 CET »
0
Ciao ragazzi, considerando lo stesso esempio e che la lista contenga solo stringhe, cm posso fare una volta premuto un item a collegare lo stesso con un link. Con parole molto semplice vorrei che al click mi apparissero dei link in modo da poter fare una ricerca del testo dell'item selezionato o con google o con wikipedia etc. In pratica dovrebbe essere un meno a tendina dove poter eseguire un "cerca con". Help me please!!!!!