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()
,否则重要的初始化将被忽略。
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) 像 |
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
|
ListAdapter getListAdapter ()
获取与此片段的ListView关联的ListAdapter。
Returns | |
---|---|
ListAdapter |
int getSelectedItemPosition ()
获取当前选定列表项的位置。
Returns | |
---|---|
int |
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. |
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 |
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. |
void setEmptyText (CharSequence text)
ListFragment的默认内容有一个TextView,当列表为空时可以显示该内容。 如果您想显示它,请调用此方法提供应该使用的文本。
Parameters | |
---|---|
text |
CharSequence
|
void setListAdapter (ListAdapter adapter)
为列表视图提供光标。
Parameters | |
---|---|
adapter |
ListAdapter
|
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. |
void setListShownNoAnimation (boolean shown)
像 setListShown(boolean)
一样,但从以前的状态转换时不使用动画。
Parameters | |
---|---|
shown |
boolean
|