ListView用多了,自然而然想去抽时间总结一下,毕竟copy来copy去,久而久之也会也淡忘,勒个时候再去花时间去阅读自己写过的代码,太不明智,也费时间。在这里我把用过的ListView都拿出来与大家分享。持续更新附源码。
一:分别继承于Activity,ListActivity,ListView使用
1)继承于Activity写法
public class ListView_ArrayAdapterActivity extends Activity {
private ListView listView;
private ArrayList<String> list=new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.listView);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());
listView.setAdapter(adapter);
}
public List<String> 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写法
public class ListView_ArrayAdapterActivity extends ListActivity {
private ArrayList<String> list=new ArrayList<String>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());
setListAdapter(adapter);
}
public List<String> 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
ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getListData());
自定义样式
R.layout.my_simple_list_item_1 ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.my_simple_list_item_1,getListData());
my_simple_list_item_1.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
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
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<IconListItem> getListData(){
List<IconListItem> listItems = new ArrayList<IconListItem>();
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<IconListItem> {
protected LayoutInflater mInflater;
private static final int mLayout = R.layout.custom_layout1;
public IconListAdapter(Context context,List<IconListItem> 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
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
<?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"
>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
custom_layout1.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
/>
<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
/>
</RelativeLayout>
引用
给大家列出本类所有成员方法实用的处理方式:
void add(T object) //添加一个对象到本ArrayAdapter
void clear() //清除所有元素
static ArrayAdapter<CharSequence> 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更节省资源。
- 大小: 43.3 KB
分享到:
相关推荐
在Android应用开发中,ArrayAdapter是一种常用的视图适配器,它允许我们把数据集合绑定到ListView、Spinner等可滚动视图上。本项目“Android25闹钟项目”利用ArrayAdapter来动态添加、显示和删除数据,并通过...
这个压缩包文件"安卓Android源码——(列表ArrayAdapter适配).zip"很可能包含了关于如何在Android应用程序中使用ArrayAdapter来显示列表数据的示例代码和详细讲解。 ArrayAdapter是基于数组的数据适配器,它可以将...
在安卓开发中,ArrayAdapter是一种常用的适配器,它用于将数据集与视图组件(如ListView、GridView)进行绑定,使数据能够显示在用户界面上。本资料包"安卓Android源码——(列表之ArrayAdapter适配).zip"着重探讨了...
在安卓开发中,ArrayAdapter是一种常用的适配器,它用于将数据集与列表视图(ListView)或者其他可滚动视图进行绑定。ArrayAdapter是Android SDK内置的适配器类,适用于简单的数据展示场景,比如从数组或者List填充...
本资源"Android源码——listView学习源码.zip"包含了对ListView工作原理的详细解析,以及可能的实践代码示例。 ListView的核心功能在于它可以动态加载和回收视图,以优化内存使用。当用户滚动列表时,ListView会...
"安卓Android源码——Listview分页加载数据.zip"这个压缩包可能包含了一个示例项目,演示了如何在ListView中实现分页加载功能。下面我们将深入探讨这个主题。 1. **ListView基础**:ListView是Android SDK中的一个...
这份"安卓Android源码——listView1.rar"压缩包很可能是包含了一个关于ListView使用和自定义的示例项目。在Android开发中,理解ListView的工作原理以及如何有效地优化其性能是非常重要的知识点。 1. **ListView基本...
本文将深入探讨“那些复杂的列表总要弄个清楚——(一)ListView动态添加项”这一主题,主要关注如何在ListView中动态添加项目。 首先,我们需要了解ListView的基本结构。ListView由Adapter驱动,Adapter是连接数据...
这份"安卓Android源码——listView学习源码.zip"压缩包提供了学习ListView的源码,非常适合开发者深入理解ListView的工作原理和实现方式。在这个源码分析中,我们将探讨ListView的关键特性、工作流程以及如何自定义...
本示例“安卓Android源码——ListView下拉刷新 Demo.zip”提供了一个具体的实现,帮助开发者理解和实现这一功能。 首先,我们要了解下拉刷新的基本原理。下拉刷新通常由两部分组成:UI动画和数据加载逻辑。UI动画是...
本篇文章将深入探讨ListView的各种用法,包括不同类型的Adapter及其基础——BaseAdapter。 首先,我们来看`5.ListViewArrayAdapterDemo`。ArrayAdapter是ListView最常用的适配器之一,它用于将数组数据绑定到...
这个压缩包"安卓Android源码——ListView上下翻页效果.zip"很可能是包含了一个示例项目,演示了如何在ListView中实现上下翻页的效果。这样的效果通常涉及到滚动监听、数据加载优化以及用户体验提升等方面。下面将...
- 通过Adapter类(如BaseAdapter、ArrayAdapter等)将数据绑定到ListView,Adapter是数据源和视图之间的桥梁。 2. **上拉刷新概念**: - 上拉刷新(Pull-to-Refresh)是一种常见的UI设计模式,允许用户在列表底部...
这份"安卓Android源码——ListView滚动气泡提示.zip"的压缩包很可能是包含了一个实现此类功能的示例项目或者库。 首先,我们来了解一下ListView的基本概念。ListView是Android SDK中的一个视图组件,主要用于展示长...
这篇博客"2011.08.26——— android ListView之多个item布局"深入探讨了如何在ListView中实现多个不同类型的Item布局,这对于创建动态、丰富的用户界面至关重要。在Android应用设计中,ListView通常用于显示如联系人...
本资料包“安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip”主要探讨了如何优化ListView的滑动性能以及自定义滚动条的技巧。 首先,要优化ListView的快速滑动,我们需要了解ListView的工作原理。...
这个名为"安卓Android源码——listview 的各种动画效果.zip"的压缩包很可能包含了多个示例,展示了如何在ListView中实现丰富的动画效果,使得用户体验更加生动和有趣。以下是对这些动画效果的详细说明: 1. **进入...
这个压缩包"安卓Android源码——ListView 中的item随意拖动.rar"显然包含了实现ListView的子项(item)可自由拖动功能的源代码。这样的功能在很多应用中都有所应用,比如整理任务列表、调整照片顺序等。下面我们将...
适配器通常是ArrayAdapter或CursorAdapter,它们会把数据转化为可显示的View。 ```xml <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> `...