Autore Topic: SimpleAdapter e ListView.setaAdapter  (Letto 931 volte)

Offline Pask85

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7
SimpleAdapter e ListView.setaAdapter
« il: 05 Febbraio 2012, 16:47:14 CET »
0
Ciao a tutti,

vorrei riaprire questa discussione chiedendovi di aiutarmi a capire l'errore. Ho usato una ListView e un SimpleAdapter, ma quando vado a settare l'Adapter nella listview mi dà la seguente eccezione :

java.lang.NullPointerException

sull'istruzione:

lv_sceltamenu.setAdapter(adapter);

cosa che non accade se inserisco l'istruzione getListView().setAdapter(adapter);  anzichè lv_sceltamenu.setAdapter(adapter);

Codice (Java): [Seleziona]
                SimpleAdapter adapter = new SimpleAdapter(this, data , R.layout.row_layout, new String[] {"item" , "subitem"}, new int[] { R.id.tv_item, R.id.tv_subitem});
                 
                ListView lv_sceltamenu = (ListView) findViewById(R.id.list);
                 
                 lv_sceltamenu.setAdapter(adapter);
                 
                // Lo assegnamo alla ListView
        //      getListView().setAdapter(adapter);        
       
        lv_sceltamenu.setOnItemClickListener(new ListView.OnItemClickListener() {

                        public void onItemClick(AdapterView<?> av, View v, int i,
                                        long l) {
                                // TODO Auto-generated method stub
                                System.out.println("prova");
                        }

Questi sono i due layout :

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:layout_height="fill_parent"
  android:gravity="center_horizontal|center_vertical"
  android:orientation="vertical" >


    <ListView
      android:id="@+id/list"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent" >

    </ListView>

</LinearLayout>

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:layout_height="fill_parent"
  android:orientation="vertical" >
    <TextView
      android:id="@+id/tv_item"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Large Text"
      android:textAppearance="?android:attr/textAppearanceLarge" />
    <TextView
      android:id="@+id/tv_subitem"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="TextView" />
</LinearLayout>

Ma dov'è l'errore ?? Qualcuno può aiutarmi a capirlo e magari spiegarmelo ??!?!?!

Grazie in anticipo.

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:SimpleAdapter e ListView.setaAdapter
« Risposta #1 il: 05 Febbraio 2012, 17:07:24 CET »
0
Posta tutto il codice dell'activity e non fare crossposting.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Pask85

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7
Re:SimpleAdapter e ListView.setaAdapter
« Risposta #2 il: 05 Febbraio 2012, 21:30:46 CET »
0
Ecco l'Activity completa :

Codice (Java): [Seleziona]
public class menu_sceltaListActivity extends ListActivity  {   
       
       
        @Override
        public void onCreate(Bundle savedInstanceState)  {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.sceltamenu);
               
                String Item[]    = new String[6];
                String SubItem[] = new String[6];
               
                Item[0] = "1";         
                Item[1] = "2";
                Item[2] = "3";
                Item[3] = "4";
                Item[4] = "5";
                Item[5] = "6";
               
                SubItem[0] = "S1";             
                SubItem[1] = "S2";
                SubItem[2] = "S3";
                SubItem[3] = "S4";
                SubItem[4] = "S5";
                SubItem[5] = "S6";
               
                 ArrayList<HashMap<String, Object>> data=new ArrayList<HashMap<String,Object>>();
                 
                 for ( int i = 0; i < 6 ; i++ ){
                         HashMap<String, Object> menu = new HashMap<String, Object>();
                         
                         menu.put("item", Item[i]);
                         menu.put("subitem", SubItem[i]);
                         data.add(menu);
                 };
                 
                SimpleAdapter adapter = new SimpleAdapter(this, data , R.layout.row_layout, new String[] {"item" , "subitem"}, new int[] { R.id.tv_item, R.id.tv_subitem});
                 
                ListView lv_sceltamenu = (ListView) findViewById(R.id.list);
                 
                 lv_sceltamenu.setAdapter(adapter);
                 
                // Lo assegnamo alla ListView
        //      getListView().setAdapter(adapter);        
       
        lv_sceltamenu.setOnItemClickListener(new ListView.OnItemClickListener() {

                        public void onItemClick(AdapterView<?> av, View v, int i,
                                        long l) {
                                // TODO Auto-generated method stub
                                System.out.println("prova");
                        }
               
        });
       
   
        };

}
« Ultima modifica: 05 Febbraio 2012, 21:38:07 CET da Pask85 »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:SimpleAdapter e ListView.setaAdapter
« Risposta #3 il: 06 Febbraio 2012, 13:04:01 CET »
0
Il layout sceltamenu contiene la ListView che cerchi di richiamare con la findViewById?

Comunque in generale se vuoi usare un layout personalizzato (e non una semplice ListView) hai due opzioni:
1) usi una Activity e imposti il tuo layout che contiene quello che vuoi
2) una ListActivity in cui il layout associato contiene quello che vuoi a patto che ci sia una ListView con id android:id="@+android:id/list"
« Ultima modifica: 06 Febbraio 2012, 13:06:11 CET da blackgin »
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Pask85

  • Nuovo arrivato
  • *
  • Post: 16
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S Plus
  • Sistema operativo:
    Windows 7
Re:SimpleAdapter e ListView.setaAdapter
« Risposta #4 il: 07 Febbraio 2012, 23:57:34 CET »
0
Si, in pratica avevo un layout che si chiamava proprio list, quindi quando andavo a fare il findbyid r.id.list veniva puntato il layout e non la lista del layout.

Comunque ho risolto usando un Activity con una lista al suo interno con id List ed ho eliminato il layout che mi dava fastidio.

Il mio codice non è cambiato di molto. In pratica la mia classe adesso estende Activity e non più la ListActivity.

Grazie.