Pregunta

Acabo de comenzar a jugar con Android y seguí un tutorial de diseño sobre la personalización de un diseño de listview en esto sitio web.

Dado que toda la lista está poblada usando matrices y todos comparten la misma ID -> (r.id.listviewid), me preguntaba cómo implemento un oyente OnitemClick en cada color individual. Estoy tratando de crear una actividad para cada color, como por ejemplo, si hago clic en el rojo, comenzará una nueva actividad, y si hago clic en el azul, comenzará una actividad diferente, etc.

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>

Java

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));
    }
}

Esto es lo que he probado ... pero no puedo entender cómo hacerlo ... ¿alguna idea? Por favor.

        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();
          }
      });
¿Fue útil?

Solución

Su OnItemClick se proporciona tanto la vista en sí como la posición dentro de la lista; Debe usar uno de estos para determinar la información que desea. En su simple ejemplo, la posición será 0, 1 o 2 para "rojo", "azul" y "verde". En un ejemplo más complicado, puede anular la creación de la vista dentro de su código y puede usar Settag () para adjuntar detalles que pueda necesitar más adelante (si la posición no es suficiente).

Otros consejos

Tú tienes Object o = null; o.toString();. Eso te está dando tu puntero nulo. Deshágase de eso y podrá poner un código real.

Verificar este tutorial Sobre cómo trabajar con el escucha de clics.

Intente escuchar en OnlistitemClick, en lugar de OnItemClick.

En onItemClick() utilizar el View y consigue el texto ...

String colourString = ((TextView) v).getText();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top