ArrayAdapter(Context context, int textViewResourceId, List<T> objects)ArrayAdapter(Context context, int textViewResourceId, List<T> objects)继续Android控件开发之四----ListView(1)下面在介绍下ArrayAdapter的相关知识
给出ArrayAdapter的构造函数
(1)ArrayAdapter(Context context, int textViewResourceId)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID(The resource ID for a layout file containing a TextView to use when instantiating views.)
(2)ArrayAdapter(Context context, int resource, int textViewResourceId)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数是参数2中布局中需要显示的TextView的ID;
(3)ArrayAdapter(Context context, int textViewResourceId, T[] objects)
(4)ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数需要显示的数据源;
(5)ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
(6)ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
第一个参数context,第二个参数是指要显示的布局(包括TextView)的ID,第三个参数是参数2中布局中需要显示的TextView的ID,第四个参数需要显示的数据源;
下面给个例子,是刚开始没有数据,动态增加数据,用(1)ArrayAdapter(Context context, int textViewResourceId)这个构造函数,这里也可以用构造函数(2),只要在构造函数那增加要显示的TextView的ID
package com.potato;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class ListViewArrayAdapterListActivity extends ListActivity // 注1
{
int mCount = 0;
ArrayAdapter<String> mAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final ListView list = getListView(); // 注2
mAdapter = new ArrayAdapter<String>(this, // 注5
android.R.layout.simple_list_item_1);
list.setAdapter(mAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) // 注3
{
menu.add(0, 1, 1, "add");
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) // 注3
{
switch (item.getItemId())
{
case 1:
{
mCount++;
// 实现实时更新,无需其他操作
// adapter.add()和items.add()操作的是同一个List<T>对象,
// 不同的是adapter.add()完成后会自动更新UI,
// items.add()之后还要显示的调用adapter.notifyDataSetChanged()来更新UI。
mAdapter.add("item" + mCount); // 注4
}
break;
}
return super.onOptionsItemSelected(item);
}
}
注1
ListActivity是继承与Acitvity,会在后面的章节会解释,这里先不做介绍;
注2
getListView()是在继承与ListActivity的情况下,获取ListView对象;
注3
这两个函数用于处理Optionmenu,后续章节介绍;
注4
实现数据的动态加载,增加了数据,自动就会刷新ui,数据就会显示在ListView上;
这里有两种实现方式:
(1)直接调用arrayAdapter的add,把数据加入,这样ui会自动更新;
(2)另一种是先吧数据加到链表中,在通过adapter.notifyDataSetChanged(),实现数据的更新;
注5
可以使用构造函数(2)
mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1);
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/drawable_backgroud"
>
<!--
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add item"
android:id="@+id/btnAdd" />
-->
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="#00000000"
android:fadingEdge="vertical"
android:background="@drawable/drawable_backgroud"/>
<TextView
android:id="@android:id/empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="no data"
/>
</LinearLayout>
至于构造函数3,4,5,6在上一篇博文ListView(1)中已经使用过。。。。
有问题请留言或者发邮件。。。
联系方式:ligexiao@gmial.com