安卓打气筒_12.安卓,ListView,打气筒的初次使用

先来介绍一下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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值