您的位置:首页 > 移动开发 > Android开发

android studio for android learning (九) android之Adapter用法

2016-07-01 10:58 183 查看

1什么是Adapter?

Adapter是连接后端数据和前端显示的适配器接口,是数据和UI(View)之间一个重要的纽带。在常见的View(List View,Grid View)等地方都需要用到Adapter。如下图直观的表达了Data、Adapter、View三者的关系:



2.所有的adapter如下所示



比较常用的有 Base Adapter,Impleader,Adapter,Counteradaptation等。

BaseAdapter是一个抽象类,继承它需要实现较多的方法,所以也就具有较高的灵活性;

ArrayAdapter支持泛型操作,最为简单,只能展示一行字。

SimpleAdapter有最好的扩充性,可以自定义出各种效果。

SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。

如果想得到各个adapter的详细信息可以参考官网教程

3.举例来研究具体的adapter应用

3.1 ArrayAdapter的应用,注意它支持泛型操作,最为简单,只能展示一行字

方法一不用布局文件xml,直接继承ListActivity

package com.dragon.testevent;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
String[] strs = {"A","B","C","D","E","F","G"};
//ArrayAdapter有三个参数,第一是对象,第二是List的格式,第三个是List的内容
//android.R.layout.simple_list_item_1  自带布局,还有android.R.layout.simple_list_item_multiple_choice, android.R.layout.simple_list_item_checked,android.R.layout.simple_list_item_single_choice等
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,strs);
setListAdapter(adapter);//将当前显示到listView中
}
}


效果图



方法2:继承Activity,ListActivity和普通的Activity相比,ListView做了许多显示方面的优化,其它一样

package com.dragon.testevent;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

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

public class MainActivity extends Activity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

listView = new ListView(this);
listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,getData()));
setContentView(listView);
}
private List<String> getData(){
List<String> data = new ArrayList<String>();
data.add("what's wrong?");
data.add("let me know.");
data.add("why not?");
data.add("you are right.");
return data;
}

}


大家可以对比上面两种方式有什么不一样,下面是效果图



3.2 simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView,还可以放上Button,CheckBox等等。下面的代码都直接继承了ListActivity

下面是activity_main.xml的代码。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.dragon.testevent.MainActivity">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/img"
android:layout_margin="5dp"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/title"
android:textColor="#ffffff"
android:textSize="20sp"/>
</LinearLayout>


对应的java代码

package com.dragon.testevent;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends ListActivity {
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);

SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.activity_main,new String[]{"title","img"},new int[] {R.id.title,R.id.img});
setListAdapter(adapter);
}
private List<Map<String,Object>> getData(){
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
Map<String,Object> map = new HashMap<String,Object>();
map.put("title","it time to go");
map.put("img",R.drawable.plane);
list.add(map);

map = new HashMap<String,Object>();
map.put("title","whtch man, you know");
map.put("img",R.drawable.plane);
list.add(map);

map = new HashMap<String ,Object>();
map.put("title","the game of power");
map.put("img",R.drawable.plane);
list.add(map);

return list;
}

}


下面是效果图



3.3 一定要以数据库作为数据源的时候,才能使用SimpleCursorAdapter。这里不在举例说明。

reference:

1. /article/4783913.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: