ListView用多了,自然而然想去抽时间总结一下,毕竟copy来copy去,久而久之也会也淡忘,勒个时候再去花时间去阅读自己写过的代码,太不明智,也费时间。在这里我把用过的ListView都拿出来与大家分享。持续更新附源码。
一:分别继承于Activity,ListActivity,ListView使用
1)继承于Activity写法
Java代码
public class ListView_ArrayAdapterActivity extends Activity {
private ListView listView;
private ArrayList list=new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,getListData());
listView.setAdapter(adapter);
}
public List getListData(){
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");
return list;
}
}
2)继承于ListActivity写法
Java代码
public class ListView_ArrayAdapterActivity extends ListActivity {
private ArrayList list=new ArrayList();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,getListData());
setListAdapter(adapter);
}
public List getListData(){
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");
return list;
}
}
对比很容易发现,前者(extends Activity)需要在xml布局中找到ListView控件,后者则不需要,但是后者xml布局中ListView标签id固定.
最后关于布局文件,前者(extends Activity)xml布局中,ListView标签id可以任意取值,而后者(extends ListActivity)ListView标签中id写法固定android:id="@+id/android:list"
二:以ArrayAdapter为例,自定义ListItem样式
系统样式:
android.R.layout.simple_expandable_list_item_1
Java代码
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_expandable_list_item_1,getListData());
自定义样式
R.layout.my_simple_list_item_1
Java代码
ArrayAdapter adapter=new ArrayAdapter(this,R.layout.my_simple_list_item_1,getListData());
my_simple_list_item_1.xml:
Java代码
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="#0000FF"
android:textSize="12pt"
/>
请留意这种布局,根布局为控件TextView.
三:自定义ArrayAdapter
ListView_ArrayAdapterActivity .java
Java代码
public class ListView_ArrayAdapterActivity extends Activity {
private ListView listView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
IconListAdapter adapter = new IconListAdapter(this,getListData());
listView.setAdapter(adapter);
}
//初始化数据
private List getListData(){
List listItems = new ArrayList();
IconListItem item1 = new IconListItem("Item 1 ",R.drawable.icon );
IconListItem item2 = new IconListItem("Item 2 ",R.drawable.icon );
IconListItem item3 = new IconListItem("Item 3 ",R.drawable.icon );
IconListItem item4 = new IconListItem("Item 4 ",R.drawable.icon );
listItems.add(item1);
listItems.add(item2);
listItems.add(item3);
listItems.add(item4);
return listItems;
}
class IconListAdapter extends ArrayAdapter {
protected LayoutInflater mInflater;
private static final int mLayout = R.layout.custom_layout1;
public IconListAdapter(Context context,List items) {
super(context,mLayout, items);//上下文环境/布局文件/填充布局文件数据
mInflater = LayoutInflater.from(ListView_ArrayAdapterActivity.this);
}
public View getView(int position, View convertView, ViewGroup parent) {
TextView textView;
ImageView imageView;
View view;
if (convertView == null) {
view = mInflater.inflate(mLayout,null);
} else {
view = convertView;
}
textView = (TextView) view.findViewById(R.id.text1);
textView.setText(getItem(position).getTitle());
imageView = (ImageView) view.findViewById(R.id.icon);
imageView.setImageResource(getItem(position).getResource());
return view;
}
}
}
IconListItem.java
Java代码
public class IconListItem {
//每条显示的构造方法
private final String mTitle;
private final int mResource;
public IconListItem(String title, int resource) {
mResource = resource;
mTitle = title;
}
public String getTitle() {
return mTitle;
}
public int getResource() {
return mResource;
}
}
main.xml
Java代码
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
custom_layout1.xml
Java代码
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
/>
引用
给大家列出本类所有成员方法实用的处理方式:
void add(T object) //添加一个对象到本ArrayAdapter
void clear() //清除所有元素
static ArrayAdapter createFromResource(Context context, int textArrayResId, int textViewResId) //从layout资源构造arrayadapter
Context getContext() //获取实例
int getCount()
View getDropDownView(int position, View convertView, ViewGroup parent) //获取drop down的popup风格选择条目的内容,参数1是位置,参数2可以通过强制转换直接获取本条的内容
Filter getFilter() //使用正则过滤数据
T getItem(int position) //获取单条内容
long getItemId(int position)
int getPosition(T item) //通过内容获取是某条
View getView(int position, View convertView, ViewGroup parent)
void insert(T object, int index) //插入新条目到数组的index位置
void notifyDataSetChanged() //通知数据变化了,告诉绑定Adapter的widget来更新UI
void remove(T object) //移出一条从数组,这里并没有指定位置
void setDropDownViewResource(int resource) //设置dropdown的layout风格
Sets the layout resource to create the drop down views.
void setNotifyOnChange(boolean notifyOnChange) //本条是arrayadapter最强大的功能,android123强烈推荐处理大数据时使用该方法,可以降低ui的处理量,刷新ui可以更快速,主要可以停止对
(add(T), insert(T, int), remove(T), clear() 的操作,当然可以通过 notifyDataSetChanged(). 或 setNotifyOnChange(true) 通知变化
void sort(Comparator super T> comparator) //这里是android开发网经常用的排序,使用arrayadapter可以直接排序,十分方便
推荐大家什么情况使用arrayadapter,什么时候使用baseadapter。当数量较多,比如超过100条或频繁动态增减时使用arrayadapter可以方便控制ui,通过setNotifyOnChanage方法,如果比较简单仅仅呈现直接从 baseadapter更节省资源。