Domanda

Ho appena iniziato a giocare con Android e ho seguito un tutorial di layout sulla personalizzazione di un layout di ListView su questo sito web.

Poiché tutto l'elenco è popolato usando array e tutti condividono lo stesso ID -> (R.id.listviewid), mi chiedevo che come si implementa un ascoltatore di OnitemClick su ogni singolo colore? Sto cercando di creare un'attività per ogni colore, come ad esempio se faccio clic su rosso, avrà una nuova attività e se faccio clic su blu, inizierà un'attività diversa ecc.

XML

<?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">
    <ListView
       android:id="@+id/ListViewId"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"/>
</LinearLayout>

Giava

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ColorList extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String[] items = {"red", "blue","green"};

        ListView listView = (ListView) findViewById(R.id.ListViewId);
        listView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, items));
    }
}

Questo è quello che ho provato ... ma non riesco a capire come farlo ... qualche idea? Per favore.

        ListView listView = (ListView) findViewById(R.id.ListViewId);
        listView.setAdapter(new UserItemAdapter(this, android.R.layout.simple_list_item_1, users));
        listView.setTextFilterEnabled(true);
        listView.setOnItemClickListener(new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> a, View v, int pos, long id){
              // some code here to start a new activity
              // the code below is just for testing, on click it will show a NullPointerException error
              Object o = null;
              o.toString();
          }
      });
È stato utile?

Soluzione

Il tuo OnitemClick è fornito sia la vista stessa che la posizione all'interno dell'elenco; È necessario utilizzare uno di questi per determinare le informazioni desiderate. Nel tuo semplice esempio, la posizione sarà 0, 1 o 2 per "rosso", "blu" e "verde". In un esempio più complicato, è possibile sovrascrivere la creazione della vista all'interno del codice e puoi usare Settag () per allegare i dettagli di cui potresti aver bisogno in seguito (se la posizione non è sufficiente).

Altri suggerimenti

Hai Object o = null; o.toString();. Questo ti sta dando il tuo puntatore nullo. Sbarazzati e sarai in grado di inserire un codice reale.

Guardare Questo tutorial su come lavorare con l'ascoltatore Click.

Prova ad ascoltare onlistItemClick, invece di OnitemClick.

In onItemClick() utilizzare il View E prendi il testo ...

String colourString = ((TextView) v).getText();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top