Cómo establecer onListItemClick para listview en android

Hola necesito hacer el evento onListItemClick para ver la lista. Hice lo siguiente, pero no funcionó. Me pego mi código y logcat. por favor, ayúdame. Error es: (java.lang.RuntimeException: Su contenido debe tener un ListView cuyo atributo id es 'android.R.id.list')

public class MyListView extends ListActivity { /** Called when the activity is first created. */ // @Override ListView list1; private String array[] = { "Iphone", "Tutorials", "Gallery", "Android","item 1", "item 2", "item3", "item 4" }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list1 = (ListView) findViewById(R.id.ListView01); list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array)); } protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Object o = this.getListAdapter().getItem(position); String pen = o.toString(); Toast.makeText(this, "You have chosen the pen: " + " " + pen, Toast.LENGTH_LONG).show(); } } 

Mi archivo de registro de gato:

 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.sai.ui.listview/com.sai.ui.listview.MyListView}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread.access$1800(ActivityThread.java:112) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.os.Handler.dispatchMessage(Handler.java:99) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.os.Looper.loop(Looper.java:123) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread.main(ActivityThread.java:3948) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at java.lang.reflect.Method.invokeNative(Native Method) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at java.lang.reflect.Method.invoke(Method.java:521) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at dalvik.system.NativeStart.main(Native Method) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list' 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ListActivity.onContentChanged(ListActivity.java:236) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:321) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.Activity.setContentView(Activity.java:1631) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at com.sai.ui.listview.MyListView.onCreate(MyListView.java:21) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1132) 04-19 18:12:36.021: ERROR/AndroidRuntime(5162): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231) 

Mi main.xml:

  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:stackFromBottom="true" > <ImageView android:id="@+id/imageview1" android:layout_width="wrap_content" android:layout_height="50px" android:background="@drawable/applicationbar" android:layout_x="0px" android:layout_y="0px" > </ImageView> <TextView android:id="@+id/textview1" android:layout_width="wrap_content" android:layout_height="50px" android:text="TextView" android:layout_x="0px" android:layout_y="55px" > </TextView> <ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="10px" android:layout_marginRight="10px" android:layout_marginTop="35px" android:layout_marginBottom="40px" android:paddingLeft="0px" android:paddingRight="0px" /> </LinearLayout> 

ListActivity requiere ListView con id android.R.id.list . Le proporciona métodos adicionales para administrar su ListView y su adaptador. Así que no debes usar código como

 list1 = (ListView) findViewById(R.id.ListView01); 

list1 = getListView() lugar.

Sin embargo, podría ir como Kartik sugirió, significa que puede utilizar una Activity regular en lugar de ListActivity y utilizar su código publicado originalmente.

  public class MyListView extends Activity 

Parte de

  public class MyListView extends ListActivity 

Y para escuchar los clics del elemento, use esto:

  list1.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { //Take action here. } } ); 

Así que su código fuente completo sería así:

  public class MyListView extends Activity { /** Called when the activity is first created. */ ListView list1; private String array[] = { "Iphone", "Tutorials", "Gallery", "Android","item 1", "item 2", "item3", "item 4" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); list1 = (ListView) findViewById(R.id.list); list1.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, array)); list1.setOnItemClickListener( new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long id) { // TODO Auto-generated method stub Object o = list1.getItemAtPosition(position); String pen = o.toString(); Toast.makeText(getApplicationContext(), "You have chosen the pen: " + " " + pen, Toast.LENGTH_LONG).show(); } } ); } } 

Editado según la respuesta de ernazm:

Si desea utilizar el

  public class MyListView extends ListActivity 

Debes eliminar

  setContentView(R.layout.main); 

Como veo que hay un dibujable en su archivo xml todavía se puede ir con esto para agregar el encabezado de la imagen utilizando listview.addHeader ():

  Resources res=getResources(); Drawable d1=res.getDrawable(R.drawable.yourimage); textview.setBackgroundDrawable(d1); listview.addHeaderView(tv1); 

Su problema aquí es que debe asegurarse de que su ListView tiene este id: @android:id/list (actualmente está utilizando ListView01 ). De hecho, eso es lo que el error está tratando de decirle:

 <ListView android:id="@android:id/list" .... 

En su XML, cambie el id de ListView0 a la list justa.

En su archivo de diseño xml llamado main.xml, parece que tiene una lista con id ListView01. Esto debe ser ahorcado en android.R.id.list. Así que en su xml …

 <ListView android:id="@android:id/list" ... /> 

Además, no es necesario crear una referencia a él para configurar el adaptador, simplemente puede llamar al método setListAdapter para ListActivity.

 protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Builder builder = new AlertDialog.Builder(this); builder.setMessage(item[position] + " is clicked."); builder.setPositiveButton("OK", null); builder.show(); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.