Android适配器——ArrayAdapter的各种重载

ListView作为android中最常用的一种控件,与他关联的各种自定义、布局、事件以及适配器是我们经常遇到的。

而我们在看适配器时,有时候真的会看花眼,因为它的多样性,它的实现类真的很多:

ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter。

 这里,详细介绍ArrayAdapter的各种重载,因为不仔细看,这确实会引起混乱。

        重载有以下几种方法:

      

       我们从上到下,用简单的例子来表现这些重载:

1、 ArrayAdapter(Context context, int resource)

这里的两个参数,context代表上下文,resource在API中的说明是这样的:The resource ID for a layout file containing a TextView to use when instantiating views

意思为:这个resource是一个包含TextView属性的layout布局。根据说明,我们写法如下:

  

package com.example.r_layout_csdn;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	ListView listView;
	ArrayAdapter<String> arrayAdapter;
	List<String> listStrings;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		 init();
	}
    
	public void init()
	{
		
		listView=(ListView)findViewById(R.id.mylist);
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1); 
                arrayAdapter.add("举头望明月");
                arrayAdapter.add("低头思故乡");
listView.setAdapter(arrayAdapter);arrayAdapter.notifyDataSetChanged();}}

 这里我们的布局采用的是: android.R.layout.simple_list_item_1,这是系统提供的一种布局方式,而它也是一个包含TextView属性的layout。 

这是一个十分常用的方式。但这样我们好像没法直观的感受到The resource ID for a layout file containing a TextView to use when instantiating views,这说明的意义,因此,我们用一个自定义的布局来替换这个系统布局。如下:

新增布局名称为item.xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/mytext"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >
    

</TextView>
在这个布局里,你可以看到它的根标签就是TextView,而不是我们常见的线性布局、相对布局等标签。如果在这个TextView外包含一层标签,程序会提示你无法找到这个TextView。

有了这个自定义布局。我们改写如下方法:

package com.example.r_layout_csdn;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	ListView listView;
	ArrayAdapter<String> arrayAdapter;
	List<String> listStrings;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		 init();
	}
    
	public void init()
	{
		
		listView=(ListView)findViewById(R.id.mylist);
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, R.layout.item);
                arrayAdapter.add("举头望明月");
                arrayAdapter.add("低头思故乡");
		listView.setAdapter(arrayAdapter);
		arrayAdapter.notifyDataSetChanged();
	}
}
以上的两个结果是一样的。


2、
ArrayAdapter(Context context,int resource,int textViewResourceId)

这里三个参数:context上下文,resource含有TextViw属性的layout布局,textViewResourceId这个就是resource布局里的TextView的Id。

我们还是使用item.xml布局:

                arrayAdapter=new ArrayAdapter<String>(MainActivity.this, R.layout.item, R.id.mytext);
		arrayAdapter.add("但使龙城飞将在");
		arrayAdapter.add("不叫胡马度阴山");
3、ArrayAdapter(Context context,int resource,List<T> objects)

这里的三个参数:context上下文,resource布局(这里较常使用的是系统提供的布局文件,当然你也可以用给自己的),List<T>数据。

这个重载,需要我们提供List<T>,OK,我们定义并赋值。代码如下:

                List<String> listStrings=new ArrayList<String>();
		listStrings.add("白日依山尽");
		listStrings.add("黄河入海流");
		listStrings.add("欲穷千里目");
		listStrings.add("更上一层楼");
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, listStrings);

这个重载是我们日常使用最频繁的,因为简便。

4、ArrayAdapter(Context context,int resource,T[] objects)

这个与上一个重载唯一不同的地方在于第三个参数。这是一个泛型数组。

那我们也给它定义并赋值,代码如下:

                String[] lsStrings={"天生我才必有用","千金散尽还复来"};
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, lsStrings);
5、ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
这里的参数,到现在大家应该也一目了然了。上下文、layout布局、TextView的Id、数据。

代码如下:

                listStrings=new ArrayList<String>();
		listStrings.add("白日依山尽");
		listStrings.add("黄河入海流");
		listStrings.add("欲穷千里目");
		listStrings.add("更上一层楼");
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, R.layout.item, R.id.mytext, listStrings);
6、ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)

与第5个重载相比,区别在于最后一个泛型数组参数。

代码如下:

                String[] lsStrings={"红豆生南国","春来发几枝"};
		arrayAdapter=new ArrayAdapter<String>(MainActivity.this, R.layout.item, R.id.mytext, lsStrings);


至此,ArrayAdapter的所有重载,我们都列出来,并做了代码演示。

后续,再介绍Adapter的其他继承接口与实现类。

OVER.






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值