适配器(一)

Adapter是用来帮助填充数据的中间桥梁,简单点说就是:将各种数据以合适的形式显示到view上,提供 给用户看!

继承结构:

图片来自:手册网

我们从这张图可以看出来Adapter有众多子类,这些子类里最常用的包括

ArrayAdapter :只能显示一行文字,功能太局限。

SimpleAdapter :同样具有良好扩展性的一个Adapter,可以自定义多种效果!

BaseAdapter :抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!

ArrayAdapter简单的使用实例

方法一 在MainActivity.java

package com.nianqing.mac.a01_adapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

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

        initView();
    }

    private void initView() {
        //要显示的数据
        String[] strs = {"aa","bb","cc","dd","ee"};
        //创建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);

    }

}

在activity_main.xml方法中只要放入一个ListView标签指定id为list_test就行了

方法二

在res/values目录下创建arrays.xml文件:

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

修改activity_main.xml中ListView标签为:

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

最后修改MainActivity.java文件:

package com.nianqing.mac.a01_adapter;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends AppCompatActivity {

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

        initView();
    }

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

    }

}

这样就可以显示出定义好的列表而不需要在java文件内使用数组了。

使用上面的方法我们看到

ArrayAdapter.createFromResource(this, R.array.myarray,android.R.layout.simple_list_item_multiple_choice )

这个方法有两个参数:

  第一个参数是 this(可以使用MainActivity.this来替换)

  第二个参数是 R.array.myarray,android.R.layout.simple_list_item_multiple_choice 这个是系统提供的listView模板,显示的效果就是一行文本

         另外系统还提供了另外好几个模板:

          simple_list_item_1 : 单独一行的文本框

          simple_list_item_2 : 两个文本框组成

          simple_list_item_multiple_choice : 选项后带有一个复选框

          simple_list_item_single_choice : 选项后带有一个单选钮

SimpleAdapter的使用示例

该适配器可以实现图文混排的listView:

首先编写一个自定义的布局

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[]{"title1", "title2", "title3"};
    //内容数组
   private String[] says = new String[]{"message1", "message2", "message3"};
     //图片数组
   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);

     //组合一组数据,并放到一个item中,然后加入列表里
        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);
    }
}

这样就能实现简单的图文混排的效果了。不过我们看到标题,内容,和图片都是写死的,除非这是个菜单否则不可能这样来展示数据。正常我们都是通过网络获取到这些对应的数据

然后组合起来展示出来,这才是我们想要的。

想学不?别急,等到后面会讲到。

上面两个适配器都是系统提供的适配器,有很多使用的限制,开发中也不常常使用这些,一般我们都会自定义适配器,来满足我们自己的一些需求。

下篇讲解自定义的适配器

时间: 2024-10-11 07:07:06

适配器(一)的相关文章

Android——ListView布局+适配器(三)

Android--ListView布局+适配器(三) package com.example.administrator.newstop; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import andro

Android——ListView多布局+适配器(二)

Android--ListView多布局+适配器(二) <span style="font-size:18px;">package com.example.administrator.newstop.entity; /** * Created by Administrator on 2016/8/4. */ public class News { private String title; private String pubDate; private int img; p

设计模式之Adapter(适配器)(转)

定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口. 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿). 如何使用? 实现Adapter方式,其实"think in Java"的"类再生"一节中已经提到,有两

JAVA设计模式(DESIGN PATTERNS IN JAVA)读书摘要 第1部分接口型模式——第3章 适配器(Adapter)模式

客户端代码提供接口来写具体实现类时,要利用已经实现接口功能的现有类,但是接口的方法名和现有类的方法名不一致,则需要使用适配器模式. 接口适配 如图所示, RequiredInterface接口声明了Client类所要调用的requiredMethod()方法,ExistingClass的usefulMethod()提供了此方法的具体实现,但是这两个方法的名字不同,这要对ExistingClass进行适配.适配类NewClass继承ExistingClass类,实现了RequiredInterfa

使用stm32开发 USB_CAN 适配器测试

USB_CAN 适配器测试例程 采用CDC透传模式 一.简介 CAN总线无处不在,在设计开发中,到处需要用到CAN总线调试工具,本工具可以作为CAN的基础测试工具,用于监听CAN总线,或测试CAN数据收发.测试时,可以用两个板子,对接起来测试.即可实现如下介绍的功能. 二.接线图示意       三.开发测试环境 兼容系统:XP.WIN7 测试系统:XP 32bit(已验证) 开发工具:MDK 4.54 MCU型号:STM32F107VC(3.5版本固件库) 测试软件:stc-isp-15xx-

自定义ListView适配器

继承BaseAdapter类 覆盖以下4个方法: @Override public int getCount() { return users.size(); } @Override public Object getItem(int position) { return users.get(position); } @Override public long getItemId(int position) { return ((User)getItem(position)).getId();

C#之数据适配器:DataAdapter对象

在ADO.NET中,能够用于执行命令操作的不但有有Command对象,还有DataAdapter对象,DataAdapter对象执行查询的返回数据将存储在DataSet对象中. DataAdapter对象概述 DataAdapter对象是DataSet和数据之间的桥梁,可以建立并初始化数据表对数据源执行SQL指令,与DataSet对象结合,提供DataSet对象存储数据,可视为DataSet对象的操作核心. 在使用DataAdapter对象时,只需要设置表示SQL命令和数据库连接的两个参数,就可

适配器(GOF23)

---恢复内容开始--- 摘要:由于应用环境的变化,需要将现存的对象放到新的环境中去,但新环境的接口是现存对象不满足的. 意图:将原本接口不兼容的类通过转换,使得它们能够一起工作,复用现有的类 adapter和adaptee的关系 适配器一般分为:类适配器和组合适(对象)配器 推荐使用组合适配器,因为类适配器可能带来高的耦合 前期尽可能的面向接口去编程,后期可以更好的解耦

springmvc 前段控制器 处理器映射器 处理器适配器 视图视图解析器 配置

1. 前段控制器 新建项目在web.xml中配置前段控制器 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</pa

Springmvc系列02 简单url处理器映射和另一个适配器

1.springmvc配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframewo