Most visited

Recently visited

Added in API level 1

ListActivity

public class ListActivity
extends Activity

java.lang.Object
   ↳ android.content.Context
     ↳ android.content.ContextWrapper
       ↳ android.view.ContextThemeWrapper
         ↳ android.app.Activity
           ↳ android.app.ListActivity
Known Direct Subclasses


一种活动,通过绑定到数据源(如数组或光标)来显示项目列表,并在用户选择项目时公开事件处理程序。

ListActivity拥有一个ListView对象,该对象可以绑定到不同的数据源,通常是数组或光标持有查询结果。 以下各节将讨论绑定,屏幕布局和行布局。

屏幕布局

ListActivity的默认布局由屏幕中央的单个全屏列表组成。 但是,如果您愿意,可以通过在onCreate()中使用setContentView()设置您自己的视图布局来自定义屏幕布局。 要做到这一点,你自己的视图必须包含一个ID为“@android:id / list”的ListView对象(如果它是代码的话就是list

或者,您的自定义视图可以包含任何类型的另一个视图对象,以便在列表视图为空时显示。 这个“空列表”通知器必须有一个ID“android:id / empty”。 请注意,当存在空白视图时,当没有要显示的数据时,列表视图将被隐藏。

以下代码演示了一个(丑陋的)自定义屏幕布局。 它有一个带有绿色背景的列表,以及另一个红色的“无数据”消息。

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:paddingLeft="8dp"
         android:paddingRight="8dp">

     <ListView android:id="@android:id/list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>

     <TextView android:id="@android:id/empty"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#FF0000"
               android:text="No data"/>
 </LinearLayout>
 

行布局

您可以在列表中指定单个行的布局。 您可以通过在由活动托管的ListAdapter对象中指定布局资源(ListAdapter将ListView绑定到数据;稍后再详细讨论)来完成此操作。

ListAdapter构造函数接受一个参数,该参数为每一行指定布局资源。 它还有两个额外的参数,可让您指定哪个数据字段与行布局资源中的哪个对象相关联。 这两个参数通常是并行阵列。

Android提供了一些标准的行布局资源。 它们位于R.layout类中,并具有诸如simple_list_item_1,simple_list_item_2和two_line_list_item之类的名称。 以下布局XML是资源two_line_list_item的源代码,它为每个列表行显示两个数据字段,一个在另一个之上。

 <?xml version="1.0" encoding="utf-8"?>
 <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:id="@+id/text1"
         android:textSize="16sp"
         android:textStyle="bold"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"/>

     <TextView android:id="@+id/text2"
         android:textSize="16sp"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"/>
 </LinearLayout>
 

您必须识别绑定到此布局中每个TextView对象的数据。 这个语法在下一节讨论。

绑定到数据

您使用实现了ListAdapter接口的类将ListActivity的ListView对象绑定到数据。 Android提供了两个标准的列表适配器: SimpleAdapter静态数据(地图)以及SimpleCursorAdapter的光标查询结果。

以下来自自定义ListActivity的代码演示了查询联系人提供程序的所有联系人,然后将Name和Company字段绑定到活动的ListView中的两行行布局。

 public class MyListAdapter extends ListActivity {

     @Override
     protected void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);

         // We'll define a custom screen layout here (the one shown above), but
         // typically, you could just use the standard ListActivity layout.
         setContentView(R.layout.custom_list_activity_view);

         // Query for all people contacts using the Contacts.People convenience class.
         // Put a managed wrapper around the retrieved cursor so we don't have to worry about
         // requerying or closing it as the activity changes state.
         mCursor = this.getContentResolver().query(People.CONTENT_URI, null, null, null, null);
         startManagingCursor(mCursor);

         // Now create a new list adapter bound to the cursor.
         // SimpleListAdapter is designed for binding to a Cursor.
         ListAdapter adapter = new SimpleCursorAdapter(
                 this, // Context.
                 android.R.layout.two_line_list_item,  // Specify the row template to use (here, two columns bound to the two retrieved cursor
 rows).
                 mCursor,                                              // Pass in the cursor to bind to.
                 new String[] {People.NAME, People.COMPANY},           // Array of cursor columns to bind to.
                 new int[] {android.R.id.text1, android.R.id.text2});  // Parallel array of which template objects to bind to those columns.

         // Bind to our new adapter.
         setListAdapter(adapter);
     }
 }
 

也可以看看:

Summary

Inherited constants

From class android.app.Activity
From class android.content.Context
From interface android.content.ComponentCallbacks2

Inherited fields

From class android.app.Activity

Public constructors

ListActivity()

Public methods

ListAdapter getListAdapter()

获取与此活动的ListView关联的ListAdapter。

ListView getListView()

获取活动的列表视图控件。

long getSelectedItemId()

获取当前选定列表项的光标行ID。

int getSelectedItemPosition()

获取当前选定列表项的位置。

void onContentChanged()

内容更改时更新屏幕状态(当前列表和其他视图)。

void setListAdapter(ListAdapter adapter)

为列表视图提供光标。

void setSelection(int position)

使用适配器的数据将当前选定的列表项目设置到指定的位置

Protected methods

void onDestroy()

在活动销毁之前执行任何最终清理。

void onListItemClick(ListView l, View v, int position, long id)

当选择列表中的项目时,将调用此方法。

void onRestoreInstanceState(Bundle state)

确保在活动恢复所有视图状态之前创建了列表视图。

Inherited methods

From class android.app.Activity
From class android.view.ContextThemeWrapper
From class android.content.ContextWrapper
From class android.content.Context
From class java.lang.Object
From interface android.view.LayoutInflater.Factory2
From interface android.view.Window.Callback
From interface android.view.KeyEvent.Callback
From interface android.view.View.OnCreateContextMenuListener
From interface android.content.ComponentCallbacks2
From interface android.view.LayoutInflater.Factory
From interface android.content.ComponentCallbacks

Public constructors

ListActivity

Added in API level 1
ListActivity ()

Public methods

getListAdapter

Added in API level 1
ListAdapter getListAdapter ()

获取与此活动的ListView关联的ListAdapter。

Returns
ListAdapter

getListView

Added in API level 1
ListView getListView ()

获取活动的列表视图控件。

Returns
ListView

getSelectedItemId

Added in API level 1
long getSelectedItemId ()

获取当前选定列表项的光标行ID。

Returns
long

getSelectedItemPosition

Added in API level 1
int getSelectedItemPosition ()

获取当前选定列表项的位置。

Returns
int

onContentChanged

Added in API level 1
void onContentChanged ()

内容更改时更新屏幕状态(当前列表和其他视图)。

也可以看看:

setListAdapter

Added in API level 1
void setListAdapter (ListAdapter adapter)

为列表视图提供光标。

Parameters
adapter ListAdapter

setSelection

Added in API level 1
void setSelection (int position)

使用适配器的数据将当前选定的列表项目设置到指定的位置

Protected methods

onDestroy

Added in API level 1
void onDestroy ()

在活动销毁之前执行任何最终清理。 这可能是因为活动正在完成(有人称之为finish() ,或者因为系统暂时销毁此活动的实例以节省空间),您可以使用isFinishing()方法区分这两种情况。

注意:不要将此方法称为保存数据的地方! 例如,如果一个活动正在编辑内容提供者中的数据,那么这些编辑应该在onPause()onSaveInstanceState(Bundle) ,而不是在这里。 这种方法通常被实现为释放资源,例如与活动相关联的线程,这样一个被销毁的活动就不会离开这些东西,而其他应用程序仍在运行。 在某些情况下,系统只会在不调用该方法(或任何其他方法)的情况下终止该活动的托管过程,因此不应该将其用于在过程消失后执行那些旨在保留的事情。

派生类必须调用超类的这个方法的实现。 如果他们不这样做,就会抛出异常。

也可以看看:

onListItemClick

Added in API level 1
void onListItemClick (ListView l, 
                View v, 
                int position, 
                long id)

当选择列表中的项目时,将调用此方法。 子类应该重写。 如果子类需要访问与选定项相关的数据,它们可以调用getListView()。getItemAtPosition(position)。

Parameters
l ListView: The ListView where the click happened
v View: The view that was clicked within the ListView
position int: The position of the view in the list
id long: The row id of the item that was clicked

onRestoreInstanceState

Added in API level 1
void onRestoreInstanceState (Bundle state)

确保在活动恢复所有视图状态之前创建了列表视图。

Parameters
state Bundle: the data most recently supplied in onSaveInstanceState(Bundle).

也可以看看:

Hooray!