An activity that displays a list of items by binding to a data source such as an array or Cursor, and exposes event handlers when the user selects an item.ListActivity hosts a ListView object that can be bound to different data sources, typically either an array or a Cursor holding query results.
ListActivity 以列表的形式显示绑定的数据,数据来自数组或者是Cursor,同时提供一些用户选择某个item的处理函数,ListActivity 拥有一个ListView对象,这个对象可以绑定不同的数据源,典型的就是数组或者Cursor。它本身继承于Activity,所以很多Activity中的方法它都能用。
新建一个工程,继承ListActivity
-
public class ListAyActivity extends ListActivity {
-
@Override
-
protected void onCreate(Bundle savedInstanceState) {
-
super.onCreate(savedInstanceState);
-
List<Map<String, Object>> items = getDate();
-
setContentView(R.layout.activity_list_ay);
-
-
SimpleAdapter adapter = new SimpleAdapter(this, items, R.layout.listay,
-
new String[] {"title" }, new int[] {android.R.id.text1 });
-
setListAdapter(adapter);
-
}
在onCreate 的时候,使用
SimpleAdapter绑定数据,根据需要,可以绑定不同的
Adapter ,这里使用
SimpleAdapter,在界面上显示文字,实现一个查询分享功能的列表,如微博 微信,当我们点击列表的时候,弹出分享界面。
SimpleAdapter构造函数: public SimpleAdapter(Context context, List extends Map
> data, int resource, String[] from, int[] to) ,构造函数的参数之间有一定的关系,data中的数据类型为Map>,Map>中的String 和String[] from对应,是要显示的内容在代码中是 title 的value , int[] to 参数标示要显示到哪里去,代码中是显示到android.R.id.text1。看一下显示数据的构造:
-
private List<Map<String, Object>> getDate() {
-
List<Map<String, Object>> myData = new ArrayList<Map<String, Object>>();
-
-
Intent mainIntent = new Intent(Intent.ACTION_SEND, null);
-
mainIntent.setType("text/plain");
-
mainIntent.putExtra(Intent.EXTRA_SUBJECT, "Shared");
-
-
PackageManager pm = getPackageManager();
-
List<ResolveInfo> lists = pm.queryIntentActivities(mainIntent, 0);
-
-
for (ResolveInfo list : lists) {
-
Intent intent = new Intent().setClassName(
-
list.activityInfo.applicationInfo.packageName,
-
list.activityInfo.name);
-
Map<String, Object> temp = new HashMap<String, Object>();
-
-
temp.put("title", list.loadLabel(pm).toString());
-
temp.put("icon", list.getIconResource());
-
temp.put("intent", intent);
-
-
myData.add(temp);
-
}
数据的构造和SimpleAdapter的参数匹配,就是查询设备中的有分享功能的APK,然后读出loadLabel。在数据中加入了temp.put("title", list.loadLabel(pm).toString()); 同时加入了temp.put("intent", intent);这个在点击的时候使用intent 弹出分享的界面。
再看一下 int resource 这个参数,代表一个布局文件,这个参数和 data 和 int[] to也要匹配, int[] to就是 resource 中的一个部件。明白了这个几个参数之间的关系,构造相应的数据即可。R.layout.listay的布局:里面只有一个android:id="@android:id/text1",这就是每个列表的布局。
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns:android=""
-
android:layout_width="match_parent"
-
android:layout_height="wrap_content"
-
android:orientation="horizontal" >
-
-
<TextView
-
android:id="@android:id/text1"
-
android:layout_width="wrap_content"
-
android:layout_height="wrap_content"
-
android:gravity="center_vertical"
-
android:minHeight="?android:attr/listPreferredItemHeightSmall"
-
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-
android:textAppearance="?android:attr/textAppearanceListItemSmall" />
-
-
</LinearLayout>
Screen Layout
ListActivity has a default layout that consists of a single, full-screen list in the center of the screen. However, if you desire, you can customize the screen layout by setting your own view layout with setContentView() in onCreate(). To do this, your own view MUST contain a ListView object with the id "@android:id/list" (or list if it's in code)
ListActivity 有一个默认的全屏布局。但是也可以定制,在onCreate 的时候setContentView,但是这个view 必须有一个ID为:@android:id/list ListView。看一下activity_list_ay.xml:
-
<?xml version="1.0" encoding="utf-8"?>
-
<LinearLayout xmlns: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>
线性布局中包含了两个view, <ListView android:id="@android:id/list" 和 <TextView android:id="@android:id/empty" 。
ListView ID使用了android 的list。TextView ID为:android:id="@android:id/empty",这个id/empty有一个特殊的地方,当ListView中有数据的时候显示数据,没有数据的时候显示 TextView。看一下效果:
阅读(2173) | 评论(0) | 转发(0) |