`

ListView——ArrayAdapter

 
阅读更多
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
分享到:
评论
2 楼 zhb31415926 2014-01-14  
写点有技术含量的,纯浪费时间的文章
1 楼 huchunyong1987 2012-03-13  
总结的不错,赞一个!

相关推荐

    Android25闹钟项目——ArrayAdapter动态添加数据,显示数据,删除数据SharedPreferences存储数据,读取数据

    在Android应用开发中,ArrayAdapter是一种常用的视图适配器,它允许我们把数据集合绑定到ListView、Spinner等可滚动视图上。本项目“Android25闹钟项目”利用ArrayAdapter来动态添加、显示和删除数据,并通过...

    安卓Android源码——(列表ArrayAdapter适配).zip

    这个压缩包文件"安卓Android源码——(列表ArrayAdapter适配).zip"很可能包含了关于如何在Android应用程序中使用ArrayAdapter来显示列表数据的示例代码和详细讲解。 ArrayAdapter是基于数组的数据适配器,它可以将...

    安卓Android源码——(列表之ArrayAdapter适配).zip

    在安卓开发中,ArrayAdapter是一种常用的适配器,它用于将数据集与视图组件(如ListView、GridView)进行绑定,使数据能够显示在用户界面上。本资料包"安卓Android源码——(列表之ArrayAdapter适配).zip"着重探讨了...

    安卓Android源码——(列表ArrayAdapter适配).rar

    在安卓开发中,ArrayAdapter是一种常用的适配器,它用于将数据集与列表视图(ListView)或者其他可滚动视图进行绑定。ArrayAdapter是Android SDK内置的适配器类,适用于简单的数据展示场景,比如从数组或者List填充...

    Android源码——listView学习源码.zip

    本资源"Android源码——listView学习源码.zip"包含了对ListView工作原理的详细解析,以及可能的实践代码示例。 ListView的核心功能在于它可以动态加载和回收视图,以优化内存使用。当用户滚动列表时,ListView会...

    安卓Android源码——Listview分页加载数据.zip

    "安卓Android源码——Listview分页加载数据.zip"这个压缩包可能包含了一个示例项目,演示了如何在ListView中实现分页加载功能。下面我们将深入探讨这个主题。 1. **ListView基础**:ListView是Android SDK中的一个...

    安卓Android源码——listView1.rar

    这份"安卓Android源码——listView1.rar"压缩包很可能是包含了一个关于ListView使用和自定义的示例项目。在Android开发中,理解ListView的工作原理以及如何有效地优化其性能是非常重要的知识点。 1. **ListView基本...

    那些复杂的列表总要弄个清楚——(一)ListView动态添加项

    本文将深入探讨“那些复杂的列表总要弄个清楚——(一)ListView动态添加项”这一主题,主要关注如何在ListView中动态添加项目。 首先,我们需要了解ListView的基本结构。ListView由Adapter驱动,Adapter是连接数据...

    安卓Android源码——listView学习源码.zip

    这份"安卓Android源码——listView学习源码.zip"压缩包提供了学习ListView的源码,非常适合开发者深入理解ListView的工作原理和实现方式。在这个源码分析中,我们将探讨ListView的关键特性、工作流程以及如何自定义...

    安卓Android源码——ListView下拉刷新 Demo.zip

    本示例“安卓Android源码——ListView下拉刷新 Demo.zip”提供了一个具体的实现,帮助开发者理解和实现这一功能。 首先,我们要了解下拉刷新的基本原理。下拉刷新通常由两部分组成:UI动画和数据加载逻辑。UI动画是...

    ListView用法大集合

    本篇文章将深入探讨ListView的各种用法,包括不同类型的Adapter及其基础——BaseAdapter。 首先,我们来看`5.ListViewArrayAdapterDemo`。ArrayAdapter是ListView最常用的适配器之一,它用于将数组数据绑定到...

    安卓Android源码——ListView上下翻页效果.zip

    这个压缩包"安卓Android源码——ListView上下翻页效果.zip"很可能是包含了一个示例项目,演示了如何在ListView中实现上下翻页的效果。这样的效果通常涉及到滚动监听、数据加载优化以及用户体验提升等方面。下面将...

    安卓Andriod源码——listview上拉刷新.zip

    - 通过Adapter类(如BaseAdapter、ArrayAdapter等)将数据绑定到ListView,Adapter是数据源和视图之间的桥梁。 2. **上拉刷新概念**: - 上拉刷新(Pull-to-Refresh)是一种常见的UI设计模式,允许用户在列表底部...

    安卓Android源码——ListView滚动气泡提示.zip

    这份"安卓Android源码——ListView滚动气泡提示.zip"的压缩包很可能是包含了一个实现此类功能的示例项目或者库。 首先,我们来了解一下ListView的基本概念。ListView是Android SDK中的一个视图组件,主要用于展示长...

    2011.08.26——— android ListView之多个item布局

    这篇博客"2011.08.26——— android ListView之多个item布局"深入探讨了如何在ListView中实现多个不同类型的Item布局,这对于创建动态、丰富的用户界面至关重要。在Android应用设计中,ListView通常用于显示如联系人...

    安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip

    本资料包“安卓Andriod源码——listview快速滑动,修改默认的滑动条.zip”主要探讨了如何优化ListView的滑动性能以及自定义滚动条的技巧。 首先,要优化ListView的快速滑动,我们需要了解ListView的工作原理。...

    安卓Android源码——listview 的各种动画效果.zip

    这个名为"安卓Android源码——listview 的各种动画效果.zip"的压缩包很可能包含了多个示例,展示了如何在ListView中实现丰富的动画效果,使得用户体验更加生动和有趣。以下是对这些动画效果的详细说明: 1. **进入...

    安卓Android源码——ListView 中的item随意拖动.rar

    这个压缩包"安卓Android源码——ListView 中的item随意拖动.rar"显然包含了实现ListView的子项(item)可自由拖动功能的源代码。这样的功能在很多应用中都有所应用,比如整理任务列表、调整照片顺序等。下面我们将...

    Android开发经验总结——ListView的使用

    适配器通常是ArrayAdapter或CursorAdapter,它们会把数据转化为可显示的View。 ```xml &lt;ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /&gt; `...

Global site tag (gtag.js) - Google Analytics