AdapterView是一个非常重要的组件之一,他非常灵活,所以得好好学。。。AdapterView本身是一个抽象类,派生出来的子类用法也十分相似,只是界面有一定的区别,因此本节把他们归为一类

AdapterView的特性有:AdapterView 继承了ViewGroup,即它的本质是一个容器 、AdapterView可以包括多个列表项,并且将他们合适的显示、AdapterView与适配器Adapter是有着千丝万缕的关系的,一般都是AdapterView调用setAdapter()方法来填充。

具体的 继承图如下:图片的来源(http://blog.csdn.net/yongyu_it/article/details/44096953)

ListView配合简单数组实例

下面就让我们先来学习ListView控件的相关用法:

不用Adapter接口来实现内容的填充,直接在values - strings 中添加一个所需要的数组,具体代码如下:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"> <ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/books"
android:divider="@color/red"
android:dividerHeight="4px"
></ListView>
</LinearLayout>

strings中的数组代码:

<resources>
<string name="app_name">AdapterView组件测试 </string>
<string-array name="books">
<item>Android基础1</item>
<item>Android基础2</item>
<item>Android基础3</item>
<item>Android基础4</item>
<item>Android基础5</item>
</string-array>
</resources>

运行的截图如下:

这是一个简单的运用,其中的 android:entries="@array/books" 是用来得到该列表的数组资源的,使用数组创建ListView十分简单,之所以简单,是因为这样的方法很难定制其他的,比如更改列表项的字体、颜色、外观,所以如果想更改就要把ListView作为AdapterView使用,通过Adapter来实现。

Adapter相关

Adapter本身是一个接口,也派生出来ListAdapter和SpinnerAdapter两个子接口具体的图如下所示:( 图片来自百度图库 )

从上面的继承图可以看出 还是蛮清晰的,几乎所有的Adapter都继承BaseAdapter。那么多,就学习一些常用的吧。

Adapter常用的实现类有:

ArrayAdapter :简单、易用,通常用于数组或者List集合的多个值包装成多个列表项

SimpleAdapter: 不简单、强大的Adapter,可用于将List集合的多个对象包装成多个列表项

SimpleCursorAdapter:与SimpleAdapter相似、但只包装Cursor提供的数据

BaseAdapter:非常强大、用于扩展,自定义各种需要的列表项

ListView配合ArrayAdapter实例

布局内的代码,两个ListView:

 <?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="vertical"> <ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/green"
android:dividerHeight="3px">
</ListView> <ListView
android:id="@+id/list2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@color/red"
android:dividerHeight="3px">
</ListView>
</LinearLayout>

java代码:

 package com.doliao.helloworld;

 import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView; /**
* Created by Administrator on 2016/10/10 0010.
*/ public class AdapterActivity extends Activity { ListView listView1, listView2; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapterview2); listView1 = (ListView) findViewById(R.id.list1);
listView2 = (ListView) findViewById(R.id.list2); String[] arrayList1 = {"第一个list", "第一个list", "第一个list"};
String[] arrayList2 = {"第二个list", "第二个list", "第二个list"};
ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.array1, arrayList1);
ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this, R.layout.array2, arrayList2); listView1.setAdapter(adapter1);
listView2.setAdapter(adapter2);
}
}

数组的布局:

 <?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:textColor="#000"
android:textSize="10pt"
/>

运行截图:

ArrayAdapter与ListView结合 跟上一个 ListView与原生的数组结合相比较,一个可以改变字体颜色大小,一个不可改变,那如果想要跟QQ的好友列表类似,那么就要学SimpleAdapter,下面就是学习SimplerAdapter

SimpleAdapter配合ListView实例

布局代码:

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

设置列表格式的 布局代码:

 <?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
android:id="@+id/image_icon"
android:layout_width="100px"
android:layout_height="100px" /> <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"> <TextView
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10pt"
/> <TextView
android:id="@+id/text_state"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10pt"
/>
</LinearLayout>
</LinearLayout>

java界面的代码:

 package com.doliao.helloworld;

 import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* Created by Administrator on 2016/10/10 0010.
*/ public class SimpleAdapterActivity extends Activity { ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapterview3);
listView = (ListView) findViewById(R.id.list3); int[] imageIds = new int[]{R.drawable.pic1, R.drawable.pic2, R.drawable.pic3, R.drawable.pic4, R.drawable.pic5};
String[] names = new String[]{"射箭", "网球", "足球", "滑雪", "登山"};
String[] states = new String[]{"百发百不中的射手", "一直捡球的网球手", "护国足球", "滑雪滑雪滑雪滑雪", "登高登高登高赏菊"}; List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
for (int i = 0; i < names.length; i++) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("pic", imageIds[i]);
map.put("name", names[i]);
map.put("state", states[i]);
listItems.add(map);
}
SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.simpleadapter, new String[]{"pic", "name", "state"},
new int[]{R.id.image_icon, R.id.text_name, R.id.text_state}); listView.setAdapter(simpleAdapter);
}
}

运行截图如下:

以上就是自定义内容,使的列表内容变得丰富,主要用到的是SimpleAdapter,SimpleAdapter有五个参数,会用这五个参数是十分关键的!

第一个参数:Context 上下文参数

第二个参数:参照源码是  List<? extends Map<String, ?>>  这种类型的集合对象

第三个参数:页面布局的一个序列号 一般是R.layout.xxxx 中的xxxx

第四个参数:这个参数是一个String[]类型的参数,取决于Map<String,?> 对象的中的哪些key对应的value来生成列表项

第五个参数:这个参数是一个int[]类型的参数,取决于你第三个参数界面中的对应组件的id

BaseAdapter 与ListView 实例

布局代码:

 <?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="vertical"> <ListView
android:id="@+id/list4"
android:layout_width="match_parent"
android:layout_height="wrap_content"> </ListView>
</LinearLayout>

java代码:

 package com.doliao.helloworld;

 import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView; /**
* Created by Administrator on 2016/10/10 0010.
*/ public class BaseAdapterActivity extends Activity { ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_adapterview4);
listView = (ListView) findViewById(R.id.list4); BaseAdapter baseAdapter = new BaseAdapter() {
@Override
public int getCount() {
return 30;
} @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 linear = new LinearLayout(BaseAdapterActivity.this);
linear.setOrientation(0);
ImageView imageView = new ImageView(BaseAdapterActivity.this);
imageView.setImageResource(R.drawable.yes);
TextView textView = new TextView(BaseAdapterActivity.this);
textView.setText("第" + (position + 1) + "个列表项");
textView.setTextSize(20);
textView.setTextColor(Color.RED);
linear.addView(imageView);
linear.addView(textView);
return linear;
}
}; listView.setAdapter(baseAdapter);
}
}

运行截图:

当创建一个BaseAdapter的时候,该对象要重写4个方法:

getCount() 该方法的返回值会控制Adapter将会包含多少个列表项,

getItem(int position) 返回值决定第position处的列表项的内容

getItemId(id position) 返回值觉得第position出的列表项的ID

getView(int position,View convertView ,View Group parent)  这个方法不是非常的明白,于是百度了下 见  http://blog.csdn.net/pkxiuluo01/article/details/7380974 这边比较详细的介绍了参数的用途。

SimpleCursorAdapter

是与数据库中的数据相关的,暂时先不学。。。

AutoCompleteTextView(自动提示框)

AutoCompleteTextView 是由EditView派生出来的一个子类,他的作用跟EditView相似,唯一不同的就是AutoCompleteTextView 组件,当你输入一些内容时,会根据内容给出一些提示,当然这些提示是你要事先设置好的, 设置的方法就是设置一个Adapter了,Adapter封装了所需要的提示文本,这样以来就OK了。当然AutoCompleteTextView 也蛮厉害的他也生了一个儿子MultiAutoCompleteTextView ,它的功能就更加强大了——允许输入多个提示项,多个提示项目之间用逗号隔开,当然使用的方法是一样的,都是通过Adapter。

下面就来个实例,布局代码:

 <?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.doliao.helloworld.MainActivity"> <AutoCompleteTextView
android:id="@+id/autotext"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>

java代码:

 package com.doliao.helloworld;

 import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView; public class MainActivity extends AppCompatActivity { AutoCompleteTextView autoCompleteTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autotext); String []array = new String[]{"JAVA","AJAX","XML","Android"}; ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this,R.layout.autotext,array); autoCompleteTextView.setAdapter(arrayAdapter);
}
}

在设置ArrayAdapter的时候,第二个参数的布局代码我就不贴了,前面有的。

运行截图为:

Android学习笔记⑦——UI组件的学习AdapterView相关1的更多相关文章

  1. Android学习笔记⑤——UI组件的学习TextView相关

    TextView是一个强大的视图组件,直接继承了View,同时也派生出了很多子类,TextView其作用说白了就是在布局中显示文本,有点像Swing编程中的JLabel标签,但是他比JLabel强大的 ...

  2. Android学习笔记⑧——UI组件的学习AdapterView相关2

    前面都是用ListView控件来配合Adapter做的一些实例,这次我们来见识一下GridView与Adapter之间的爱恨情仇.... GridView是用于在界面上按行.列分布的方式来显示多个的组 ...

  3. Android学习笔记⑥——UI组件的学习ImageView相关

    ImageView是集成了View的组件,它的主要工作就是显示一些图片啊,虽然他的用法一句话概括了,但是我觉得学起来应该不会太简单,正所谓 短小而精悍么 :) ImageView 派生了 ImageB ...

  4. vue学习笔记(八)组件校验&通信

    前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...

  5. Vue学习笔记-Vue.js-2.X 学习(三)===>组件化高级

    (四) 组件化高级 1.插槽(slot)的基本使用 A:基本使用: <slot></slot> B:默认置:<slot><h1>中间可以放默认值< ...

  6. Vue学习笔记-Vue.js-2.X 学习(二)===>组件化开发

    ===重点重点开始 ========================== (三) 组件化开发 1.创建组件构造器: Vue.extends() 2.注册组件: Vue.component() 3.使用 ...

  7. Vue学习笔记-Vue.js-2.X 学习(六)===>脚手架Vue-CLI(项目说明-Babel)

    五  Vue学习-vue-cli脚手架学习(创建只选一个选项:Babel) 1. 项目目录说明 node_modules : 包管理文件夹 public : 静态资源 src : 源代码 gitign ...

  8. Vue学习笔记-Vue.js-2.X 学习(四)===>脚手架Vue-CLI(基本工作和创建)

    (五) 脚手架Vue-CLI 一 Vue-CLI前提(nodejs和webpack) 二  Vue学习-nodejs按装配置,Node.js 就是运行在服务端的 JavaScript. 1. 去nod ...

  9. Vue学习笔记-Vue.js-2.X 学习(一)===>基本知识学习

    一  使用环境: windows 7 64位操作系统 二  IDE:VSCode/PyCharm 三  Vue.js官网: https://cn.vuejs.org/ 四  下载安装引用 方式1:直接 ...

随机推荐

  1. 咏南多层开发框架支持最新的DELPHI 10 SEATTLE

    购买了咏南多层开发框架的老用户如有需要提供免费升级. 中间件

  2. python windows错误码

    在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问 在用python删除文件的时候,一直报这个错误,查了 error5的错误是 拒绝访问.那么是删除权限不够?用管理员 ...

  3. Telnet连接Win7系统被拒绝的原因及解决方法

    有时要与计算机进行远程连接,会用到telnet.win7中telnet默认是没有开启的,所以这时连接会连接失败,其失败提示如下: 正在连接192.168.100.103...无法打开到主机的连接. 在 ...

  4. csu oj 1811: Tree Intersection (启发式合并)

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 给你一棵树,每个节点有一个颜色.问删除一条边形成两棵子树,两棵子树有多少种颜色是有 ...

  5. Codeforces 706 C. Hard problem (dp)

    题目链接:http://codeforces.com/problemset/problem/706/C 给你n个字符串,可以反转任意一个字符串,反转每个字符串都有其对应的花费ci. 经过操作后是否能满 ...

  6. UVaLive 6805 Pantun Grader (恶心的模拟)

    题意:给定 n 首诗,然后让你给他打分,有四种规则,第一种是按音节打,如果音节在8-12之间,就加10,第二种就是按押韵打,如果13,24一个押韵就加20分. 第三种按音节数打,13,24有一个一样的 ...

  7. drop,truncate与delete的区别

    注意:这里说的delete是指不带where子句的delete语句 相同点 truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 d ...

  8. Ext的Panel总结(好文章)

    我刚才禁不住诱惑去看了一下Ext.Window的API文档,发现只是比Panel多了点什么最大化.最小化.关闭.置前.置后.动画引发目标设置.可调整大小这些功能.像什么标题栏.工具栏之类的东西在Ext ...

  9. 查看系统和PowerShell版本

    查询PowerShell当前版本$psversiontable.BuildVersion.Major 查询Windows当前版本:[System.Environment]::OSVersion.Ver ...

  10. rails中的语法

    1. erb文件中的语法说明 erb文件中常混合使用Ruby语言和html语言,以下为两种常见的格式 <% 写逻辑脚本(Ruby语法) %> <%= 直接输出变量值或运算结果 %&g ...