Most visited

Recently visited

Added in API level 11

ListFragment

public class ListFragment
extends Fragment

java.lang.Object
   ↳ android.app.Fragment
     ↳ android.app.ListFragment


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

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

屏幕布局

ListFragment具有由单个列表视图组成的默认布局。 但是,如果您愿意,您可以通过从onCreateView(LayoutInflater, ViewGroup, Bundle)返回自己的视图层次结构来自定义分段布局。 为此,您的视图层次结构必须包含一个ID为“@android:id / list”的ListView对象(如果它在代码中list

或者,您的视图层次结构可以包含任何类型的另一个视图对象,以便在列表视图为空时显示。 这个“空列表”通知器必须有一个ID“android: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="@id/android:list"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
               android:background="#00FF00"
               android:layout_weight="1"
               android:drawSelectorOnTop="false"/>

     <TextView android:id="@id/android: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接口的类将ListFragment的ListView对象绑定到数据。 Android提供了两个标准的列表适配器: SimpleAdapter静态数据(地图)以及SimpleCursorAdapter的光标查询结果。

必须使用ListFragment.setListAdapter()将列表与适配器关联。 不要直接调用ListView.setAdapter() ,否则重要的初始化将被忽略。

也可以看看:

Summary

Inherited XML attributes

From class android.app.Fragment

Inherited constants

From interface android.content.ComponentCallbacks2

Public constructors

ListFragment()

Public methods

ListAdapter getListAdapter()

获取与此片段的ListView关联的ListAdapter。

ListView getListView()

获取片段的列表视图控件。

long getSelectedItemId()

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

int getSelectedItemPosition()

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

View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

提供默认实现来返回一个简单的列表视图。

void onDestroyView()

从列表视图中分离。

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

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

void onViewCreated(View view, Bundle savedInstanceState)

一旦创建了视图层次结构,附加到列表视图。

void setEmptyText(CharSequence text)

ListFragment的默认内容有一个TextView,当列表为空时可以显示该内容。

void setListAdapter(ListAdapter adapter)

为列表视图提供光标。

void setListShown(boolean shown)

控制列表是否正在显示。

void setListShownNoAnimation(boolean shown)

setListShown(boolean)一样,但从以前的状态转换时不使用动画。

void setSelection(int position)

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

Inherited methods

From class android.app.Fragment
From class java.lang.Object
From interface android.content.ComponentCallbacks2
From interface android.view.View.OnCreateContextMenuListener
From interface android.content.ComponentCallbacks

Public constructors

ListFragment

Added in API level 11
ListFragment ()

Public methods

getListAdapter

Added in API level 11
ListAdapter getListAdapter ()

获取与此片段的ListView关联的ListAdapter。

Returns
ListAdapter

getListView

Added in API level 11
ListView getListView ()

获取片段的列表视图控件。

Returns
ListView

getSelectedItemId

Added in API level 11
long getSelectedItemId ()

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

Returns
long

getSelectedItemPosition

Added in API level 11
int getSelectedItemPosition ()

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

Returns
int

onCreateView

Added in API level 11
View onCreateView (LayoutInflater inflater, 
                ViewGroup container, 
                Bundle savedInstanceState)

提供默认实现来返回一个简单的列表视图。 子类可以覆盖以替换它们自己的布局。 如果这样做,返回的视图层次结构必须有一个ListView,其ID为android.R.id.list并且可以有一个兄弟视图ID为android.R.id.empty ,该列表为空时将显示该视图。

如果您用自己的自定义内容覆盖此方法,请考虑在布局文件中包含标准布局list_content ,以便继续保留ListFragment的所有标准行为。 特别是,这是目前唯一能够显示内置的不确定进度状态的方法。

Parameters
inflater LayoutInflater: The LayoutInflater object that can be used to inflate any views in the fragment,
container ViewGroup: If non-null, this is the parent view that the fragment's UI should be attached to. The fragment should not add the view itself, but this can be used to generate the LayoutParams of the view.
savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.
Returns
View Return the View for the fragment's UI, or null.

onDestroyView

Added in API level 11
void onDestroyView ()

从列表视图中分离。

onListItemClick

Added in API level 11
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

onViewCreated

Added in API level 13
void onViewCreated (View view, 
                Bundle savedInstanceState)

一旦创建了视图层次结构,附加到列表视图。

Parameters
view View: The View returned by onCreateView(LayoutInflater, ViewGroup, Bundle).
savedInstanceState Bundle: If non-null, this fragment is being re-constructed from a previous saved state as given here.

setEmptyText

Added in API level 11
void setEmptyText (CharSequence text)

ListFragment的默认内容有一个TextView,当列表为空时可以显示该内容。 如果您想显示它,请调用此方法提供应该使用的文本。

Parameters
text CharSequence

setListAdapter

Added in API level 11
void setListAdapter (ListAdapter adapter)

为列表视图提供光标。

Parameters
adapter ListAdapter

setListShown

Added in API level 11
void setListShown (boolean shown)

控制列表是否正在显示。 如果您正在等待显示初始数据,则可以使其不显示。 在此期间,将显示一个不确定的进度指示器。

应用程序通常不需要使用它自己。 ListFragment的默认行为是从未显示列表开始,只有在给出适配器setListAdapter(ListAdapter)后才显示它。 如果该点上的列表没有被显示,那么当它被显示时,将不会看到隐藏状态。

Parameters
shown boolean: If true, the list view is shown; if false, the progress indicator. The initial value is true.

setListShownNoAnimation

Added in API level 11
void setListShownNoAnimation (boolean shown)

setListShown(boolean)一样,但从以前的状态转换时不使用动画。

Parameters
shown boolean

setSelection

Added in API level 11
void setSelection (int position)

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

Hooray!