How to set onListItemClick for listview in android

hi I need to make an onListItemClick event to view the list. I did the following but did not work. I insert my code and log code. please, help. error: (java.lang.RuntimeException: your content must have a ListView whose id attribute is "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(); } } 

my log file is log:

 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) 

my 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> 
+4
source share
6 answers

ListActivity requires ListView with id android.R.id.list . It provides you additional methods for managing your ListView and adapter. Therefore you should not use code like

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

using list1 = getListView() instead.

However, you could go as Kartik suggested, meaning you can use regular Activity instead of ListActivity and use your originally published code.

+2
source
  public class MyListView extends Activity 

int

  public class MyListView extends ListActivity 

and to listen for clicks of an element, use the following:

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

So your complete source code will be like this:

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

Edited according to ernazm answer:

if you want to use

  public class MyListView extends ListActivity 

you must delete

  setContentView(R.layout.main); 

As I can see, in your xml file there is the possibility of drawing, you can still use this to add the title of the image using listview.addHeader ():

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

Your problem is that you have to make sure your ListView has this identifier: @android:id/list (you are currently using ListView01 ). In fact, this is what the error is trying to tell you:

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

In your XML, change the ListView0 identifier to list .

0
source

In your xml layout file named main.xml, you have a list with the ID ListView01. This needs to be hung on android.R.id.list. So in your xml ...

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

In addition, you do not need to create a link to it to install the adapter, you can simply call the setListAdapter method for ListActivity.

0
source
 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(); } 
-2
source

All Articles