Adapter子类创建AdapterView子类

本文详细介绍了如何使用ArrayAdapter、SimpleAdapter和BaseAdapter为ListView提供数据。ArrayAdapter适用于简单的TextView显示,SimpleAdapter支持复杂的布局,BaseAdapter则允许动态生成布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文以ListView(AdapterView的子类)为例,简要说明使用ArrayAdapter、SimpleAdapter和BaseAdapter(Adapter的子类)为其提供“内容”的方式。

使用ArrayAdapter和SimpleAdapter时,将ListView的列项布局定义在layout文件中,使用时都需要创建Adapter对象,区别在于,ArrayAdapter只能加载简单的TextView,而SimpleAdapter则更加灵活,listView的列项可以由多个控件组成。因而前者的layout就是TextView布局,而后一般包含各种控件.

创建Adapter对象时,分别采用:

ArrayAdapter<Object>adapter = new ArrayAdapter<Object>

                  (this,R.layout.array_items,arr);//这里的arr是listView的列项内容组成的数组

而对于SimpleAdapter,由于列项内容较多,要现将每个列项中的内容封装,多个列项最后组成数组或list

封装单个列项:List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();

for (int i=0;i<length;i++){

  Map<String, Object>listItems = new HashMap<String, Object>();

  listItems.put(key,value);

  ...  

  listItems.add(listItem);

}

创建SimpleAdapter

SimpleAdapter adapter = new SimpleAdapter(this,listItems,R.layout.simple_item,

  new String[]{key0,key1,key2,...}

  new int[]{R.id.key0,R.id.key1,R.id.key2,...})  //此处为获取列项的layout中的控件id

 

而BaseAdapter则更加灵活,其列项布局在代码中动态生成,而无需再layout文件中预先设置

创建BaseAdapter

BaseAdapter adapter = BaseAdapter(){

  @Override

  public int getCount(){return item_number;}

  @Override

  public Object getItem(int position){return null;}

  @Override

  public  long getItemId(int position){return position;}

  @Override

  public View getView(int position,View convertView, ViewGroup parent){

    LinearLayout line = new LinearLayout(MainActivity.this);

    ImageView image = new imageView(MainActivity.this);

    TextView tv = new TextView(MainActivity.this);

    line.addView(image);

    line.addView(tv);

    return line;

  }

}  //关于BaseAdapter的生命周期有待学习

 

创建完Adapter之后,一定不要忘了list.setAdapter(adapter),设置adapter加载内容。

 

转载于:https://www.cnblogs.com/himanxu/p/4654700.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值