Android - How to create clickable listview? Android - How to create clickable listview? android android

Android - How to create clickable listview?


In fact it is quite easy:

This is your Activity with the ListView, it implements an OnItemClickListener:

public class MainActivity extends Activity implements OnItemClickListener {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        setContentView(R.layout.activity_main);        //* *EDIT* *         ListView listview = (ListView) findViewById(R.id.listView1);        listview.setOnItemClickListener(this);    }    public void onItemClick(AdapterView<?> l, View v, int position, long id) {        Log.i("HelloListView", "You clicked Item: " + id + " at position:" + position);            // Then you start a new Activity via Intent            Intent intent = new Intent();            intent.setClass(this, ListItemDetail.class);            intent.putExtra("position", position);            // Or / And            intent.putExtra("id", id);            startActivity(intent);    }

Edit

The above code would be placed in your MainActivity.java. I changed the name of the class to MainActivity and the contentView to setContentView(R.layout.activity_main) - The names are those of a freshly created Android Project in Eclipse.
Please see also the 2 new lines under //* Edit * - those will set the Listener for clicks on items in the list.

Your activity_main.xml should look like this:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="fill_parent"    android:layout_height="wrap_content">    <ListView        android:id="@+id/listView1"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignParentLeft="true"        android:layout_alignParentTop="true"        android:entries="@array/sections" >    </ListView></RelativeLayout>

The array.xml (not string.xml) in your `res/values/` folder looks like this

<resources>    <string-array name="sections">        <item >Pro Constructive</item>        <item >Con Constructive</item>        <item >1st Speaker Cross</item>        <item >Pro Rebbutal</item>        <item >Con Rebuttal</item>        <item >2nd Speaker Cross</item>        <item >Pro Summary</item>        <item >Con Summary</item>        <item >Grand Cross</item>        <item >Pro Final Focus</item>        <item >Con Final Focus</item>    </string-array></resources>

N.B.: If you copy & paste this code it should work. But you will get an error by clicking on an Item because you haven't created the ListItemDetail.class yet.

Here is an example of how this could look:

Your ListItemDetail.java:

public class ListItemDetail extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_listitem);    Intent intent = getIntent();    int position = intent.getIntExtra("position", 0);    // Here we turn your string.xml in an array    String[] myKeys = getResources().getStringArray(R.array.sections);    TextView myTextView = (TextView) findViewById(R.id.my_textview);    myTextView.setText(myKeys[position]);    }}

And its activity_listitem.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical">    <TextView        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:id="@+id/my_textview"/></LinearLayout>

If you copy past this code it will work.


you can populate listview from array in string.xml as like this

String[] myKeys = getResources().getStringArray(R.array.sections);ListView mListView = (ListView)findViewById(R.id.listView1);mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myKeys));  

and clicking on the listview items is quite simple and easy method.just use setOnItemClickListener

mListView.setOnItemClickListener(new OnItemClickListener() {    public void onItemClick(AdapterView<?> arg0,View arg1, int position, long arg3)     {        Intent n = new Intent(getApplicationContext(), yourclass.class);        n.putExtra("position", position);        startActivity(n);    }});


You use the onListItemClick function to set up your Intent that loads the next activity and passes any data across.

public void onListItemClick(ListView parent, View view, int position, long id){    Intent intent = new Intent(this, AnotherActivity.class);    intent.putExtra("position", position);    startActivity(intent);}