Android基础入门教程——2.4.1 Adapter基础讲解

Android基础入门教程——2.4.1 Adapter基础讲解

标签(空格分隔): Android基础入门教程


本节引言

从本节开始我们要讲的UI控件都是跟Adapter(适配器)打交道的,了解并学会使用这个Adapter很重要,
Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供
给用户看!


1.MVC模式的简单理解

在开始学习Adapter之前我们要来了解下这个MVC模式概念:
举个例子:大型的商业程序通常由多人一同开发完成,比如有人负责操作接口的规划与设计,
有人负责程序代码的编写如果要能够做到程序项目的分工就必须在程序的结构上做适合的安排
,如果,接口设计与修改都涉及到程序代码的改变的话,那么两者的分工就会造成执行上的困难
良好的程序架构师将整个程序项目划分为如图的三个部分:

关系图解析:

  • Model:通常可以理解为数据,负责执行程序的核心运算与判断逻辑,,通过view获得用户
    输入的数据,然后根据从数据库查询相关的信息,最后进行运算和判断,再将得到的结果交给view来显示
  • view:用户的操作接口,说白了就是GUI,应该使用哪种接口组件,组件间的排列位置与顺序都需要设计
  • Controller:控制器,作为model与view之间的枢纽,负责控制程序的执行流程以及对象之间的一个互动

而这个Adapter则是中间的这个Controller的部分:
Model(数据) —> Controller(以什么方式显示到)—> View(用户界面)
这就是简单MVC组件的简单理解!


2.Adapter概念解析

官方文档:Adapter

首先我们来看看他的继承结构图:

上面就是Adapter以及继承结构图了,接着我们介绍一下实际开发中还用到的几个Adapter吧!

  • BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
  • ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字~
  • SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果!
  • SimpleCursorAdapter:用于显示简单文本类型的listView,一般在数据库那里会用到,不过有点过时,
    不推荐使用!

其实一个BaseAdapter就够玩的了,至于其他的,实际开发中用得不多,后面用到在讲解~


3.代码示例:

好的,多说无益,写代码最实际,接下来我们来用写几个简单的Adapter实例,
帮助我们了解Adapter给我们带来的便利,另外,因为Adapter需要结合ListView,
GridView等等控件讲解,一些高级一点的用法我们都放在ListView那里讲!
这里就简单演示下效果,另外这里用到的控件是ListView,下一节就会讲解,
现在看不懂也没关系!


1)ArrayAdapter使用示例:

运行效果图:

代码实现:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //要显示的数据
        String[] strs = {"基神","B神","翔神","曹神","J神"};
        //创建ArrayAdapter
        ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this,android.R.layout.simple_expandable_list_item_1,strs);
        //获取ListView对象,通过调用setAdapter方法为ListView设置Adapter设置适配器
        ListView list_test = (ListView) findViewById(R.id.list_test);
        list_test.setAdapter(adapter);
    }
}

一些相关的东西:

1.除了通过数组外,我们还可以写到一个数组资源文件中:
比如:在res\valuse下创建一个数组资源的xml文件:arrays.xml

<?xml version="1.0" encoding="utf-8"?>  
<resources>  
    <string-array name="myarray">  
    <item>语文</item>  
    <item>数学</item>  
    <item>英语</item>  
    </string-array>      
</resources>

接着布局的listview属性设置下这个列表项:

<ListView  
        android:id="@id/list_test"  
        android:layout_height="match_parent"  
        android:layout_width="match_parent"   
        android:entries="@array/myarray"/>

就可以了~
当然我们也可以在Java代码中这样写:

 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
        R.array.myarray,android.R.layout.simple_list_item_multiple_choice );

同样也是可以的!

2.一开始也说了这个ArrayAdapter支持泛型,那么集合必不可少啦,比如,这样写:

List<String> data = new ArrayList<String>();
data.add("基神");
data.add("B神");
ArrayAdapter<String> adapter = new ArrayAdapter<String>
                (this,android.R.layout.simple_expandable_list_item_1,data);

就可以了~

3.我们看到了在实例化ArrayAdapter的第二个参数:
android.R.layout.simple_expandable_list_item_1
其实这些是系统给我们提供好的一些ListView模板,有下面几种:

simple_list_item_1 : 单独一行的文本框
simple_list_item_2 : 两个文本框组成
simple_list_item_checked : 每项都是由一个已选中的列表项
simple_list_item_multiple_choice : 都带有一个复选框
simple_list_item_single_choice : 都带有一个单选钮


2)SimpleAdapter使用示例:

SimpleAdapter:简单的Adapter,看似简单,功能强大,下面我们来写个稍微复杂一点的列表
布局吧!

运行效果图:

代码实现:

先来编写一个列表项目每一项的布局:

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">

    <!-- 定义一个用于显示头像的ImageView -->
    <ImageView
        android:id="@+id/imgtou"
        android:layout_width="64dp"
        android:layout_height="64dp"
        android:baselineAlignBottom="true"
        android:paddingLeft="8dp" />

    <!-- 定义一个竖直方向的LinearLayout,把QQ呢称与说说的文本框设置出来 -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8dp"
            android:textColor="#1D1D1C"
            android:textSize="20sp" />

        <TextView
            android:id="@+id/says"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="8px"
            android:textColor="#B4B4B9"
            android:textSize="14sp" />

    </LinearLayout>

</LinearLayout>

接下来是MainActivity.java:

public class MainActivity extends AppCompatActivity {

    private String[] names = new String[]{"B神", "基神", "曹神"};
    private String[] says = new String[]{"无形被黑,最为致命", "大神好厉害~", "我将带头日狗~"};
    private int[] imgIds = new int[]{R.mipmap.head_icon1, R.mipmap.head_icon2, R.mipmap.head_icon3};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        List<Map<String, Object>> listitem = new ArrayList<Map<String, Object>>();
        for (int i = 0; i < names.length; i++) {
            Map<String, Object> showitem = new HashMap<String, Object>();
            showitem.put("touxiang", imgIds[i]);
            showitem.put("name", names[i]);
            showitem.put("says", says[i]);
            listitem.add(showitem);
        }

        //创建一个simpleAdapter
        SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), listitem, R.layout.list_item, new String[]{"touxiang", "name", "says"}, new int[]{R.id.imgtou, R.id.name, R.id.says});
        ListView listView = (ListView) findViewById(R.id.list_test);
        listView.setAdapter(myAdapter);
    }
}

好的,上面就是SimpleAdapter的简单用法了,有点意思~


3)SimpleCursorAdapter使用示例:

虽然这东西过时了,不过对于不怎么会SQLite的初学者来说,用起来还是蛮方便的!
记得前面我们学ContentProivder写过的读取联系人的例子么?之前是通过打印Log的
方式显示出来,现在我们通过这个SimpleCursorAdapter把它显示到ListView上!

实现效果图

代码实现

先写下listView每个item的布局:

list_item.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal">


    <TextView
        android:id="@+id/list_name"
        android:layout_width="0dp"
        android:layout_height="64dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="小猪"
        android:textColor="#0000FF"
        android:textSize="18sp" />

    <TextView
        android:id="@+id/list_phone"
        android:layout_width="0dp"
        android:layout_height="64dp"
        android:layout_weight="1"
        android:gravity="center"
        android:text="13798989898"
        android:textColor="#EA5C4D"
        android:textSize="18sp" />


</LinearLayout>

接着activity_main布局和前面的一样,就是简单的ListView,然后是

MainActivity.java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView list_test = (ListView) findViewById(R.id.list_test);
        //读取联系人
        Cursor cursor = getContentResolver()
                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        SimpleCursorAdapter spcAdapter = new SimpleCursorAdapter(this,R.layout.list_item,cursor,
                new String[]{ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,ContactsContract.CommonDataKinds.Phone.NUMBER},
                new int[]{R.id.list_name,R.id.list_phone});
        list_test.setAdapter(spcAdapter);
    }
}

最后AndroidManifest.xml里加个读联系人的权限就可以了!

<uses-permission android:name="android.permission.READ_CONTACTS"/>

一问一答:

:就这么简单?
——答:是的,直接获取到Cursor,然后绑定就好了,无需你自己再写什么SQL语句!
:你说这东西过时了,那拿什么来代替?
——答:一般的做法是自己重写BaseAdapter,获取到数据集合后跟对应的控件进行绑定!
:这个SimpleCursorAdapter还有没有要注意的地方?
——答:有,使用SimpleCursorAdapter的话,绑定的数据库表中一定要有_id这个字段,
或者as _id;而且在绑定时取出的数据必须包含这个_id项,否则的话会报以下错误!
java.lang.IllegalArgumentException: column ‘_id’ does not exist


本节小结:

好的,关于Adapter的基础讲解就到这里,当然我们这里讲解的三个Adapter,我们实际开发中…
基本上用不到,哈哈,除了SimpleAdapter偶尔可能会用下,一般我们都是重写BaseAdapter的!
另外,关于BaseAdapter的,有很多东西要讲解,就把他丢到ListView那里一起讲,毕竟Adapter
总是和View沾边,而且ListView是我们用得最多的一个空间~嗯,本节就到这里,谢谢~

  • 12
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
第一篇Android系统结构和SDK使用............................................................................................................................5 第1章 Android的系统介绍...........................................................................................................................................5 1.1 系统介绍...........................................................................................................................................................5 1.2 软件结构和使用的工具...................................................................................................................................7 第2章 Android SDK的开发环境..................................................................................................................................10 2.1 Android SDK的结构......................................................................................................................................10 2.2 Android SDK环境安装..................................................................................................................................11 2.2.1. 安装JDK基本Java环境。................................................................................................................11 2.2.2. 安装Eclipse...........................................................................................................................................12 2.2.3. 获得Android SDK...............................................................................................................................12 2.2.4(1). 在Eclipse 3.4(Ganymede)中安装ADT...............................................................................14 2.2.4(2). 在Eclipse 3.5(Galileo)中安装ADT.....................................................................................17 2.2.5. 在Eclipse中配置Android SDK.........................................................................................................20 2.3 Android中运行仿真器环境............................................................................................................................21 2.3.1. 建立Android虚拟设备.......................................................................................................................21 2.3.2. 运行虚拟设备........................................................................................................................................22 2.3.3. 使用Android中的工具.......................................................................................................................23 2.3.4. 使用logcat.............................................................................................................................................24 2.3.5. 使用仿真器控制....................................................................................................................................25 2.3.6. 命令行工具adb、mksdcard等..........................................................................................................26 2.3.7. 使用设备控制........................................................................................................................................28 2.4 Android中建立工程........................................................................................................................................29 2.4.1. 建立工程................................................................................................................................................29 2.4.2. 查看和编辑各个文件............................................................................................................................31 2.4.3. 运行工程................................................................................................................................................33 第二篇 Android应用程序的概述和框架.......................................................................................................................36 第3章 Android应用层程序的开发方式.......................................................................................................................36 3.1 应用程序开发的结构.......................................................................................................................................36 3.2 API参考文档的使用........................................................................................................................................36 第4章Android应用程序示例........................................................................................................................................40 4.1 HelloActivity程序的运行............................................................................................................................40 4.2 HelloActivity的源文件结构........................................................................................................................41 4.2.1.Android.mk文件.................................................................................................................................41 4.2.2.AndroidManifest.xml文件.................................................................................................................42 4.2.3.源代码文件...........................................................................................................................................42 4.2.4.布局文件...............................................................................................................................................43 4.2.5.其他资源文件.......................................................................................................................................43 4.3 HelloActivity的编译结构............................................................................................................................43 4.4 SkeletonApp的程序的运行........................................................................................................................44 4.5 SkeletonApp的源文件结构........................................................................................................................44 4.6 SkeletonApp的编译结构............................................................................................................................46 第5章 Android应用程序的内容...................................................................................................................................47 5.1 Android应用程序的概念性描述.................................................................................................................47 5.1.1.应用程序的组成部分...........................................................................................................................47 5.1.2.应用程序的生命周期...........................................................................................................................48 5.2 应用程序包含的各个文件.............................................................................................................................50 5.3 使用am工具启动Android应用程序........................................................................................................51 2 www.linuxidc.com 第三篇AndroidUI系统实现.....................................................................................................................................53 第6章 UI的基本外形和控制........................................................................................................................................53 6.1 控件和基本事件的响应.................................................................................................................................53 6.1.1.事件响应方法.......................................................................................................................................54 6.1.2.第二种响应方法...................................................................................................................................56 6.1.3.第三种响应方法...................................................................................................................................57 6.2 键盘事件的响应...............................................................................................................................................57 6.3 运动事件的处理...............................................................................................................................................59 6.4 屏幕间的跳转和事件的传递...........................................................................................................................62 6.4.1.跳转的方法...........................................................................................................................................62 6.4.2.带有返回值的跳转...............................................................................................................................63 6.5菜单的使用........................................................................................................................................................66 6.6弹出对话框........................................................................................................................................................67 6.6.1. 提示信息和两个按钮的对话框............................................................................................................68 6.6.2. 提示信息和三个按钮的对话框............................................................................................................69 6.6.3. 列表项对话框........................................................................................................................................70 6.6.4. 单选项和按钮对话框............................................................................................................................70 6.6.5. 复选项和按钮对话框............................................................................................................................71 6.6.6. 文本的按键对话框(使用布局文件)................................................................................................72 6.7 样式的设置.......................................................................................................................................................74 6.7.1.预定样式对话框...................................................................................................................................74 6.7.2.自定义样式对话框...............................................................................................................................74 6.7.3.窗口透明样式示例...............................................................................................................................75 第7章控件(Widget)的使用.....................................................................................................................................78 7.1 Android中控件的层次结构.........................................................................................................................78 7.2 基本控件的使用.............................................................................................................................................79 7.2.1.普通按钮...............................................................................................................................................79 7.2.2.图像区域...............................................................................................................................................80 7.2.3.图像按钮...............................................................................................................................................82 7.2.4.进度条...................................................................................................................................................83 7.2.5.多种控件...............................................................................................................................................85 7.3 自定义的视图...................................................................................................................................................86 第8章视图组(ViewGroup)和布局(Layout)的使用...........................................................................................89 8.1 Android的屏幕元素体系................................................................................................................................89 8.2 几种独立使用的视图组...................................................................................................................................90 8.2.1.网页视图...............................................................................................................................................90 8.2.2.旋转按钮...............................................................................................................................................91 8.2.3.文本切换器...........................................................................................................................................93 8.2.4.图像切换器...........................................................................................................................................94 8.3 作为简单容器使用的视图组...........................................................................................................................95 8.3.1.单选按钮组...........................................................................................................................................95 8.3.2.使用滚动条...........................................................................................................................................96 8.4 布局(Layout)..............................................................................................................................................99 8.4.1.基本的布局内容...................................................................................................................................99 8.4.2.线性布局(LinearLayout).............................................................................................................100 8.4.3.相对布局(RelativeLayout)...........................................................................................................101 8.4.4.表单布局(Table Layout)..............................................................................................................103 8.5 网格(Grid)视图组...................................................................................................................................103 3 www.linuxidc.com 8.6 列表(List)视图组....................................................................................................................................107 8.7 使用Tab组织UI.........................................................................................................................................109 第9章 2D图形接口的使用.........................................................................................................................................113 9.1 使用2D图形接口的程序结构。..................................................................................................................113 9.2 图像、图形、文本的基本绘制.....................................................................................................................114 9.3 文本的对齐方式.............................................................................................................................................116 9.4 使用路径效果(PathEffect).....................................................................................................................118 9.5 剪裁效果.........................................................................................................................................................119 9.6 记录绘制的过程.............................................................................................................................................121 9.7 动画效果.........................................................................................................................................................123 第10章 OpenGL 3D图形的使用................................................................................................................................125 10.1 使用OpenGL图形接口的程序结构。.....................................................................................................125 10.2 基本的绘制...................................................................................................................................................126 10.3 渲染器的实现...............................................................................................................................................127 10.4 3D动画效果的实现......................................................................................................................................129

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值