19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.app; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.AdapterView; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ListAdapter; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.widget.ListView; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * An activity that displays a list of items by binding to a data source such as 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * an array or Cursor, and exposes event handlers when the user selects an item. 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ListActivity hosts a {@link android.widget.ListView ListView} object that can 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * be bound to different data sources, typically either an array or a Cursor 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * holding query results. Binding, screen layout, and row layout are discussed 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the following sections. 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <strong>Screen Layout</strong> 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ListActivity has a default layout that consists of a single, full-screen list 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * in the center of the screen. However, if you desire, you can customize the 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * screen layout by setting your own view layout with setContentView() in 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * onCreate(). To do this, your own view MUST contain a ListView object with the 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * id "@android:id/list" (or {@link android.R.id#list} if it's in code) 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Optionally, your custom view can contain another view object of any type to 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * display when the list view is empty. This "empty list" notifier must have an 46ffa337483a86cc404d8236c440c91f0be75ca806Romain Guy * id "android:id/empty". Note that when an empty view is present, the list view 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will be hidden when there is no data to display. 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The following code demonstrates an (ugly) custom screen layout. It has a list 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * with a green background, and an alternate red "no data" message. 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 52f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <?xml version="1.0" encoding="utf-8"?> 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:orientation="vertical" 57f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * android:layout_width="match_parent" 58980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_height="match_parent" 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:paddingLeft="8dp" 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:paddingRight="8dp"> 61f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 62ffa337483a86cc404d8236c440c91f0be75ca806Romain Guy * <ListView android:id="@android:id/list" 63f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * android:layout_width="match_parent" 64980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_height="match_parent" 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:background="#00FF00" 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:layout_weight="1" 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:drawSelectorOnTop="false"/> 68f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 69ffa337483a86cc404d8236c440c91f0be75ca806Romain Guy * <TextView android:id="@android:id/empty" 70f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * android:layout_width="match_parent" 71980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_height="match_parent" 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:background="#FF0000" 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:text="No data"/> 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </LinearLayout> 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 76f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <strong>Row Layout</strong> 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You can specify the layout of individual rows in the list. You do this by 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * specifying a layout resource in the ListAdapter object hosted by the activity 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * (the ListAdapter binds the ListView to the data; more on this later). 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A ListAdapter constructor takes a parameter that specifies a layout resource 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * for each row. It also has two additional parameters that let you specify 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * which data field to associate with which object in the row layout resource. 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * These two parameters are typically parallel arrays. 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Android provides some standard row layout resources. These are in the 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.R.layout} class, and have names such as simple_list_item_1, 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * simple_list_item_2, and two_line_list_item. The following layout XML is the 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * source for the resource two_line_list_item, which displays two data 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * fields,one above the other, for each list row. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 97f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <?xml version="1.0" encoding="utf-8"?> 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 101980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_width="match_parent" 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:layout_height="wrap_content" 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:orientation="vertical"> 104f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <TextView android:id="@+id/text1" 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:textSize="16sp" 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:textStyle="bold" 108980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_width="match_parent" 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:layout_height="wrap_content"/> 110f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <TextView android:id="@+id/text2" 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:textSize="16sp" 113980a938c1c9a6a5791a8240e5a1e6638ab28dc77Romain Guy * android:layout_width="match_parent" 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * android:layout_height="wrap_content"/> 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </LinearLayout> 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 117f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You must identify the data bound to each TextView object in this layout. The 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * syntax for this is discussed in the next section. 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <strong>Binding to Data</strong> 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You bind the ListActivity's ListView object to data using a class that 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * implements the {@link android.widget.ListAdapter ListAdapter} interface. 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Android provides two standard list adapters: 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@link android.widget.SimpleAdapter SimpleAdapter} for static data (Maps), 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and {@link android.widget.SimpleCursorAdapter SimpleCursorAdapter} for Cursor 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * query results. 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The following code from a custom ListActivity demonstrates querying the 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Contacts provider for all contacts, then binding the Name and Company fields 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to a two line row layout in the activity's ListView. 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 138f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <pre> 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * public class MyListAdapter extends ListActivity { 141f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @Override 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * protected void onCreate(Bundle savedInstanceState){ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * super.onCreate(savedInstanceState); 145f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // We'll define a custom screen layout here (the one shown above), but 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // typically, you could just use the standard ListActivity layout. 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * setContentView(R.layout.custom_list_activity_view); 149f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // Query for all people contacts using the {@link android.provider.Contacts.People} convenience class. 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // Put a managed wrapper around the retrieved cursor so we don't have to worry about 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // requerying or closing it as the activity changes state. 153a01d5fe8794974a18408897744675e1c59af1ed4Joe LaPenna * mCursor = this.getContentResolver().query(People.CONTENT_URI, null, null, null, null); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * startManagingCursor(mCursor); 155f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 156f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * // Now create a new list adapter bound to the cursor. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // SimpleListAdapter is designed for binding to a Cursor. 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * ListAdapter adapter = new SimpleCursorAdapter( 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * this, // Context. 160f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * android.R.layout.two_line_list_item, // Specify the row template to use (here, two columns bound to the two retrieved cursor 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * rows). 162a01d5fe8794974a18408897744675e1c59af1ed4Joe LaPenna * mCursor, // Pass in the cursor to bind to. 163a01d5fe8794974a18408897744675e1c59af1ed4Joe LaPenna * new String[] {People.NAME, People.COMPANY}, // Array of cursor columns to bind to. 164a01d5fe8794974a18408897744675e1c59af1ed4Joe LaPenna * new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns. 165f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * // Bind to our new adapter. 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * setListAdapter(adapter); 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * } 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </pre> 171f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see #setListAdapter 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see android.widget.ListView 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ListActivity extends Activity { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This field should be made private, so it is hidden from the SDK. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ListAdapter mAdapter; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This field should be made private, so it is hidden from the SDK. 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide} 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected ListView mList; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Handler mHandler = new Handler(); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean mFinishedStart = false; 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Runnable mRequestFocus = new Runnable() { 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void run() { 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList.focusableViewAvailable(mList); 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 195f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method will be called when an item in the list is selected. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Subclasses should override. Subclasses can call 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * getListView().getItemAtPosition(position) if they need to access the 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * data associated with the selected item. 201f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param l The ListView where the click happened 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param v The view that was clicked within the ListView 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position The position of the view in the list 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param id The row id of the item that was clicked 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onListItemClick(ListView l, View v, int position, long id) { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 209f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Ensures the list view has been created before Activity restores all 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * of the view states. 213f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *@see Activity#onRestoreInstanceState(Bundle) 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onRestoreInstanceState(Bundle state) { 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureList(); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onRestoreInstanceState(state); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 223f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * @see Activity#onDestroy() 224f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania */ 225f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania @Override 226f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania protected void onDestroy() { 227f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania mHandler.removeCallbacks(mRequestFocus); 228f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania super.onDestroy(); 229f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania } 230f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania 231f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania /** 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Updates the screen state (current list and other views) when the 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * content changes. 234f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @see Activity#onContentChanged() 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void onContentChanged() { 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super.onContentChanged(); 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project View emptyView = findViewById(com.android.internal.R.id.empty); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList = (ListView)findViewById(com.android.internal.R.id.list); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mList == null) { 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new RuntimeException( 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "Your content must have a ListView whose id attribute is " + 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "'android.R.id.list'"); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (emptyView != null) { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList.setEmptyView(emptyView); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList.setOnItemClickListener(mOnClickListener); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mFinishedStart) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setListAdapter(mAdapter); 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mHandler.post(mRequestFocus); 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mFinishedStart = true; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Provide the cursor for the list view. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setListAdapter(ListAdapter adapter) { 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project synchronized (this) { 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureList(); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mAdapter = adapter; 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList.setAdapter(adapter); 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Set the currently selected list item to the specified 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * position with the adapter's data 272f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania * 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param position 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setSelection(int position) { 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mList.setSelection(position); 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the position of the currently selected list item. 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getSelectedItemPosition() { 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mList.getSelectedItemPosition(); 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the cursor row ID of the currently selected list item. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public long getSelectedItemId() { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mList.getSelectedItemId(); 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the activity's list view widget. 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListView getListView() { 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ensureList(); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mList; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 300f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the ListAdapter associated with this activity's ListView. 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ListAdapter getListAdapter() { 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mAdapter; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void ensureList() { 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (mList != null) { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 312ef769f6e4849d5d2580570ce08f9493dd43e7f0dDianne Hackborn setContentView(com.android.internal.R.layout.list_content_simple); 313f767e7521257110e5ae4289ded42e1deeb972e16Nicolas Catania 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private AdapterView.OnItemClickListener mOnClickListener = new AdapterView.OnItemClickListener() { 317d6c1919779acb042392615637b9007e0c4b89023Christian Mehlmauer public void onItemClick(AdapterView<?> parent, View v, int position, long id) 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project onListItemClick((ListView)parent, v, position, id); 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 323