先来介绍一下ListView这么个东西,适合用在一排数据的展示中,

例如,这样的一个就是使用了List View这么一个控件实现功能

实现的思路主要是这样

在布局里面加一个ListView像是这样,以下代码是常用的他的一些方法

然后在MainActivity中找到这个控件,然后为他增加一个适配器。

适配器我们最先介绍一个叫做BaseAdapter的适配器,这个比较洋气

比较好用,

实现的效果是上面的那一个图

packagecom.example.xialm.list_test2;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ListView;importandroid.widget.TextView;public class MainActivity extendsAppCompatActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ListView ll=(ListView)findViewById(R.id.lv);//设置适配器

ll.setAdapter(newmyad());

}

//开始编写适配器public class myad extendsBaseAdapter{

//下面是Base Adapter的四个构造方法,

@Overridepublic intgetCount() {//实现几个条目的显示

return 100000;

}

@Overridepublic Object getItem(intposition) {return null;

}

@Overridepublic long getItemId(intposition) {return 0;

}

@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

TextView tv;if(convertView == null){//创建新的缓存对象

tv = new TextView(MainActivity.this);

}else{//复用新的缓存对象

tv =(TextView)convertView;

}int s = position+1;

tv.setText("你好,你是第"+s+"个世界");returntv;

}

}

}

既可实现,

那么我们可以看到上面那个有点low,像我们手机上那种洋气一点的布局是怎么做的呢,

最起码得实现一个这样的布局把

如下:

这个好像还可以接受一小下下,那么我们现在的数据是我们自己造的,我们在后面会提到

如何从其他的地方拿到我们需要的东西然后再放到我们的LIst View上面来显示,

尤其是数据库中的数据放到我们的界面上

先不剧透了,先来搞上面的那个界面,

有第一个案例来说, 我们可以发现要做出这样的案例,只需要改动我们Adapter里面的一个

叫做getView 这个方法就可以了,

也就是我们要改动的是这一块

@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

TextView tv;if(convertView == null){//创建新的缓存对象

tv = new TextView(MainActivity.this);

}else{//复用新的缓存对象

tv =(TextView)convertView;

}int s = position+1;

tv.setText("你好,你是第"+s+"个世界");returntv;

}

整体的框架我们不需要改动,尤其是if  和  else这一段逻辑

解释一下这一段逻辑是用来实现将我们的程序内存最大的优化

是我们的app的运行更加流畅,使资源不会因为还没有释放之前,

就内存溢出了

那么我们改动哪一块呢,

应该是textview那一快

看上去这样只能显示一行的内容,我们现在想要在左边显示一个图片,

在右边显示两个文本框框,这个明显涉及到了布局

我们再回首看我们的代码的时候发现,我们代码中写的我们只能显示view

当然TextView是View的一种啦

那么顺理成章的,现在可以将目光和思路引导到我们实现 将布局文件转换为 view的伟大道路上

Android底层的工程师为我们创建了这么一个api正好是可以进行实现我们的功能

江湖人称,打气筒,

总结一下,一切思路和上面第一个案例一样,

我们只需要改变Adapter中第四个构造方法中的view

想实现那个就必须要将layout文件转换为view,我们引进了一个技术叫做打气筒

下面是代码

xml

main

只有一个listview控件

xml

item

这个是我们每一个显示条目的格式,

大概就是这样,左边是一个图片,右边是两个文本框,上面一个大一点的下面是一个小一点的

在代码中需要实现一个打气筒的步骤这一步是将一个layout布局变成一个view,

这样来实现,能够把一个布局变成一个view,显示到listview中

下面是逻辑代码

packagecom.example.xialm.listview_3;importandroid.app.AlertDialog;importandroid.content.DialogInterface;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.KeyEvent;importandroid.view.LayoutInflater;importandroid.view.View;importandroid.view.ViewGroup;importandroid.widget.BaseAdapter;importandroid.widget.ListView;importandroid.widget.TextView;importjava.util.List;importjava.util.zip.Inflater;public class MainActivity extendsAppCompatActivity {

AlertDialog builder=null;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);//找到List View这个我们关心的对象

ListView lv_ =(ListView)findViewById(R.id.lv);//给我们的lv_一个适配器,用于给我们的lv_加上数据

lv_.setAdapter(newMyad());//做完这一步之后就是建类,是一个我们的适配器类,这里是继承了BaseAdapter

}//当用户选择点击返回的时候,给用户以友好的提示

@Overridepublic boolean onKeyUp(intkeyCode, KeyEvent event) {if (keyCode ==KeyEvent.KEYCODE_BACK) {

builder= new AlertDialog.Builder(MainActivity.this)

.setTitle("温馨提示:")

.setMessage("您是否要退出程序?")

.setPositiveButton("确定",newDialogInterface.OnClickListener() {public voidonClick(DialogInterface dialog,intwhichButton) {

MainActivity.this.finish();

}

})

.setNegativeButton("取消",newDialogInterface.OnClickListener() {public voidonClick(DialogInterface dialog,intwhichButton) {

builder.dismiss();

}

}).show();

}return true;

}//自己定义一个类继承baseadapter

public class Myad extendsBaseAdapter

{

@Overridepublic intgetCount() {//创建多少个项目

return 500;

}

@Overridepublic Object getItem(intposition) {return null;

}

@Overridepublic long getItemId(intposition) {return 0;

}

@Overridepublic View getView(intposition, View convertView, ViewGroup parent) {

View view;if(convertView == null){//创建新的view对象//可以通过一个打气筒将一个布局资源转换为一个view对象//view = View.inflate(MainActivity.this,R.layout.itemm,null);//将布局文件不仅转换成了view,而且最后一个参数用来做了一个组,//可以把刚生成的view添加进来//打气筒的第二种方法

view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.itemm,null);//打气筒的第三种方法//LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);//view = inflater.inflate(R.layout.itemm,null);

}else{//复用旧的view对象

view =convertView;

}returnview;

}

}

}

下面介绍一个比较简单的数组适配器,arrayadapter

相比于上面的那一个我们可以看出来,好像使用第一个baseadapter也可以实现同样的功能,

是的,因为数组适配器的出现就是为了显示数组中的基本内容,并且是显示到一个文本框框里面,

我们知道数据适配器的作用就是用来实现,把数据和显示连接在一起,像是数据-->适配器-->显示器,这样一个过程

那么,需求如果是很简单的内容,我们是不是还需要使用复杂的适配器呢,

当然不用,这里提供一个适配器叫做数组适配器,使用方法简单

使用的场合是仅显示一行文字的时候使用

下面是代码‘

xml:mainactivity

>

xml:item

>

/>

/>

逻辑代码

packagecom.example.xialm.arrayadapter;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.widget.ArrayAdapter;importandroid.widget.ListView;public class MainActivity extendsAppCompatActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);//找到关心的控件

ListView ll =(ListView)findViewById(R.id.lv_1);//定一个数组为了加进去

String objects[] = {"你好","世界","hello","world"};//搞一个数组适配器,将数组里面的内容展示到我们的listview上//但是我们的这个适配器有一个局限性,智能显示一个textview,要实现更多的功能还是需要使用复杂一点的适配器,

ArrayAdapter myadd = new ArrayAdapter(getApplicationContext(), R.layout.item, R.id.tv_name,objects);//ArrayAdapter myadd1 = new ArrayAdapter(getApplicationContext(), R.layout.item, R.id.tv_number,objects);//设置数据适配器

ll.setAdapter(myadd);//ll.setAdapter(myadd1);

}

}

下面一种是simpleadapter

集合里面放字典

字典里面放键值对

使用设置好的集合配置  simpleadapter

xml main

/>

/>

>

xml item

>

>

/>

/>

逻辑代码

packagecom.example.xialm.simpleadapter;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.widget.ListView;importandroid.widget.SimpleAdapter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;public class MainActivity extendsAppCompatActivity {

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);//找到我们关心的控件

ListView lv =(ListView) findViewById(R.id.lv_1);//准备listview要显示的数据

List> data1 = new ArrayList>();//准备map放入list,

Map map1 = new HashMap();

map1.put("name","猪哥");

map1.put("phone", "663924");

Map map2 = new HashMap();

map2.put("name","梅鸣");

map2.put("phone", "662086");

Map map3 = new HashMap();

map3.put("name","你岩");

map3.put("phone","662110");

data1.add(map1);

data1.add(map2);

data1.add(map3);

SimpleAdapter mysim= new SimpleAdapter(MainActivity.this,data1,R.layout.item,new String[]{"name","phone"},new int[]{R.id.tv_3,R.id.tv_4});//上下文,要显示在哪个界面上的//数据,这个数据是一个list,里面有map的一个数据,//加载的界面//这个是显示的列,//列里面显示什么,因为id号是int所以使用int数组//配置这个适配器

lv.setAdapter(mysim);

}

}

安卓打气筒_12.安卓,ListView,打气筒的初次使用相关推荐

  1. 什么是android刷机包,什么是安卓RAM?安卓RAM和安卓ROM有什么区别?

    我们平时听到的安卓系统其实是一个很复杂的程序,就比如安卓ROM和安卓RAM,安卓ROM我们平时可能听说过,但是RAM可能听说就比较少了,对于初次了解安卓的机友来说可能是一个模糊的地方.今天,小编就为大 ...

  2. coloros11跟Android,安卓10与安卓11究竟差异在哪里?我们拿这两台新机试了一下

    9 月 24 日,OPPO 带着全新的 ColorOS 11 与我们正式见面,这一基于安卓 11 底层深度打造的新系统给我们带来了不少新特性.而就在 ColorOS 11 发布的前些天,华为也为我们带 ...

  3. sqllite开发安卓项目_安卓学习笔记(一)

    本人接触安卓也有一年半载了.本人是c++程序员,我对于安卓和java的态度就像,c++是大老婆,java和安卓是小老婆.但是大老婆总是让人不省心,所以安卓还是挺好玩的.那么接下来写写文章,记录一下安卓 ...

  4. win10 linux安卓模拟器,WIN10电脑安卓模拟器逍遥安卓唯一真正支持

    原标题:WIN10电脑安卓模拟器逍遥安卓唯一真正支持 WIN10操作系统来了,微软宣布可以免费升级!逍遥安卓模拟器在WIN10刚发布体验版之初便已完美兼容,至现在已经被数十万安卓模拟器玩家完美验证,技 ...

  5. android opengl版本太低,安卓模拟器opengl_安卓模拟器无法安装“系统opengl版本过低”的通用解决方法_安卓模拟器通用版_通用安卓模拟器...

    安卓模拟器无法安装"系统opengl版本过低"的通用解决方法 在安装安卓模拟器时,出现"系统opengl版本过低",下图提示,说明你的显卡暂不支持模拟器: 遇到 ...

  6. android10和11,安卓10与安卓11究竟差异在哪里?我们拿这两台新机试了一下

    原标题:安卓10与安卓11究竟差异在哪里?我们拿这两台新机试了一下 9 月 24 日,OPPO 带着全新的 ColorOS 11 与我们正式见面,这一基于安卓 11 底层深度打造的新系统给我们带来了不 ...

  7. 安卓SDK和安卓版本的对应关系

    安卓SDK和安卓版本的对应关系 Android 14 SDK         API level 34 Android 13 SDK         API level 33 Android 12L ...

  8. android8.1官方下载,【安卓市场】安卓市场app官方下载 v7.8.1.81 手机版-七喜软件园...

    安卓市场app是一款手机应用安装下载的平台.在这款软件上面,有上万款软件跟游戏供你下载.它功能强大,下载软件没有复杂操作,只需要点击下载就能够下载软件并且帮助你自动安装软件.还有一个超级强大的功能就是 ...

  9. UI设计师不可不知的安卓屏幕知识-安卓100分享

    http://www.android100.org/html/201505/24/149342.html UI设计师不可不知的安卓屏幕知识-安卓100分享 不少设计师和工程师都被安卓设备纷繁的屏幕搞得 ...

最新文章

  1. Python基础语法06--文件
  2. LeetCode Reverse Linked List II
  3. (转)Eclipse平台技术概述
  4. oracle把时间段转换成每一天_在家办公难适应?来看看专职外汇交易员的一天
  5. C语言实现大数据除法
  6. android创建构建方法,Android 应用程序构建实战+原理精讲
  7. 正则表达式 正整数_史上最全的正则表达式 (1) -- 校验数字的表达式
  8. 把博客园自己博客皮肤改了下
  9. iOS WebView生成长截图的第三种解决方案
  10. android app运行显示两个图标
  11. 轻松掌握namedtuple
  12. cdr软件百度百科_cdr软件是什么?cdr是什么软件?
  13. office图标空白异常解决方法
  14. 计算机知识论,计算机科学与技术中的系统论与辩证法
  15. 如何编辑styleGAN生成的图像的属性
  16. Hadoop2.x Yarn作业提交(客户端)
  17. 2016虾神封箱:虾神的空间统计书单
  18. mac蓝牙鼠标总是自己断开_解决 mac 蓝牙鼠标、键盘经常总是 断开连接的问题
  19. 【判断是前端bug还是后端bug】
  20. 解决乱码的方法(转)

热门文章

  1. 华为U8860刷机包 CM11 Andorid 4.4.4 稳定流畅 推荐长期使用
  2. 51fe 漫画下载助手 release091008
  3. Mac 安装Homebrew方案
  4. Windows XP下如何取消打印机与任务计划的共享
  5. Android 超级简单的沉浸式状态栏
  6. mysql关键字与连表操作理论
  7. 云计算为教育插上翅膀 北飞科技与亚马逊AWS奏响教育均衡协奏曲
  8. 钉钉企业通知消息接口(三)
  9. php订阅号增粉,微信公众号增粉方案(10个微信公众号增粉办法)
  10. 《亚马逊二十年—贝索斯的公开信》