ListView控件介绍:用于将数据库中的数据或者网络中的数据通过列表的形式显示出来;ListView采用MVC模式将前端显示和后端数据进行分离。 也就是说,ListView控件在装载数据时并不是直接使用ListView.add或者类似的方法添加数据,而是需要指定一个Adapter对象。该对象相当于MVC模式中的C(控制器),ListView相当于MVC模式中的V(视图),用于显示数据。为ListView提供数据的List或数组相当于MVC模式中的M(模型)在ListView控件中通过Adapter对象获得需要显示的数据,在创Adapter对象时需要指定要显示的数据(List或数组对象),因此,要显示的数据与ListView之间通过Adapter对象进行连接,同时又互相独立,也就是说,ListView只知道显示的数据来自Adapter,并不知道这些数据是来自List还是数组。

1.ListView应用实例(这里是在java代码中操作listview对象的):

public class MyListActivity extends ListActivity{

//定义一个字符串数组,代表我们的数据源

private  static final String[] COUNTRIES=new String[]{"中国","法国","美国","德国","日本","朝鲜","印度"};

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//把我们需要展现的数据展现到ListView上

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item,COUNTRIES));

//通过getListView()方法获取listview对象

ListView lv=getListView();

lv.setTextFilterEnabled(true);

Log.e("MyListActivity", "listview界面产生了");

lv.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView<?> parent, View view,

int position, long id) {

//通过getText()方法获取用户选择的ListView中的选项信息

Log.e("MyListActivity", "列表选项被点击了,看看会出现什么");

Toast.makeText(getApplicationContext(), ((TextView)view).getText(), Toast.LENGTH_LONG).show();

}

});

}

}

列表项xml文件如下:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dp"

android:textSize="16sp">

</TextView>

Java代码①:

public class MyActivity extends Activity{

private ListView listview;

private ArrayAdapter<String> adapter;

//定义一个数据源

private List<String> data=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获取数据源

data=MyDataSource.getDataSource();

adapter=new ArrayAdapter<String>(this, R.layout.list_item, data);

listview=(ListView) findViewById(R.id.listview);

//将数据源通过adapter显示到listview视图上

listview.setAdapter(adapter);

}

}

Java代码②:

public class MyDataSource {

public MyDataSource() {

super();

}

public static List<String> getDataSource(){

List<String> list=new ArrayList<String>();

list.add("北京");

list.add("上海");

list.add("广州");

list.add("湖北");

list.add("湖南");

list.add("深圳");

list.add("西安");

return list;

}

}

布局文件activity_main.xml代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<ListView

android:id="@+id/listview"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="@string/hello_world" />

</RelativeLayout>

列表项list_item.xml代码:

<?xml version="1.0" encoding="utf-8"?>

<TextView xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:padding="10dp"

android:textSize="16sp">

</TextView>

2.ListView应用实例:

在上面的两个例子中我们用的都是ArrayAdapter(数组适配器),这个适配器显示的数据源比较单一;而SimpleAdapter能定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等;

下面我们就来看看如何使用SimpleAdapter

①MainActivity.java

public class MainActivity extends Activity {

private ListView mListView;

private SimpleAdapter mSimpleAdapter=null;

private List<Map<String, Object>> data=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mListView=(ListView) findViewById(R.id.listview);

data=new ArrayList<Map<String,Object>>();

/**

* setAdapter方法:

* 第一个参数:是一个Context的对象;

* 第二个参数:是一个集合,采用这样的形式List<Map<String, Object>>,为什么呢?

* 这里的List<E>用来存储listview中的列表项,而List<E>集合中的每一个元素,又都有自己的特征

* 因此我们通过用map集合代表list的元素的方式,完成了listview数据展示的多元化;

* 第三个参数:是一个布局文件,用来展示listview的每个列表项的内容

* 第四个参数:是我们List<Map<String, Object>>中Map<key,value>的key的数组表示;

* 第五个参数:使我们List<Map<String, Object>>中Map<key,value>的value的数组表示;

*/

Map<String, Object> mMap1=new HashMap<String, Object>();

mMap1.put("title", "我是第一个功能");

mMap1.put("icon", R.drawable.ic_launcher);

Map<String, Object> mMap2=new HashMap<String, Object>();

mMap2.put("title", "我是第二个功能");

mMap2.put("icon", R.drawable.ic_launcher);

Map<String, Object> mMap3=new HashMap<String, Object>();

mMap3.put("title", "我是第三个功能");

mMap3.put("icon", R.drawable.ic_launcher);

data.add(mMap1);

data.add(mMap2);

data.add(mMap3);

mListView.setAdapter(new SimpleAdapter(this, data, R.layout.list_item,

new String[]{"title","icon"}, new int[]{R.id.tv,R.id.iv}));

}

}

②activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<ListView

android:id="@+id/listview"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

</RelativeLayout>

③list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

<ImageView

android:id="@+id/iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

<TextView

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

3.自定义适配器:android界面中有时候需要显示稍微复杂的界面时,就需要我们自己定义一个adapter,那么就要继承BaseAdapter。

android开发之路08(ListView&Adapter)的更多相关文章

  1. Android开发之 。。各种Adapter的用法

    同样是一个ListView,可以用不同的Adapter让它显示出来,比如说最常用的ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,以及重写BaseAdap ...

  2. android开发之路09(浅谈SQLite数据库01)

    1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...

  3. Toast显示图文界面——Android开发之路1

    Toast的多种使用方法 Toast其实是一个功能特别强大的组件,不仅仅可以吐司一个文本内容,还可以吐司图片以及图文混排的界面.具体用法如下: 第一种:简单的纯文本内容的吐司: Toast.makeT ...

  4. 菜单(Menu)的三中创建方式——Android开发之路2

    菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...

  5. Android中隐藏顶部状态栏的那些坑——Android开发之路3

    Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...

  6. Android中点击隐藏软键盘最佳方法——Android开发之路4

    Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...

  7. Intent的七大组件——Android开发之路5

    ------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...

  8. android开发之路12(android四大组件&Fragment&AsyncTask类)

    一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...

  9. android开发之路13(实际开发常见问题及解决办法ING)

    1.DDMS下无法浏览SDcard? 在做音乐播放器的时候,想通过eclipse中的DDMS视图将音频文件push到sd卡中,发现总是报错 :Failed to push selection: Rea ...

随机推荐

  1. [HIve - LanguageManual] Hive Operators and User-Defined Functions (UDFs)

    Hive Operators and User-Defined Functions (UDFs) Hive Operators and User-Defined Functions (UDFs) Bu ...

  2. 为了以后愉快的玩耍,Virtualbox安装Ubuntu

    为了以后愉快的玩耍,Virtualbox安装Ubuntu 每次安装虚拟机都是总要折腾一下,毕竟不是特别熟悉,几个小细节总要google半天,为了以后能愉快的玩耍.把这些问题都记录下来,免得再折腾. 此 ...

  3. 第二百九十三天 how can I 坚持

    总感觉怪怪的,换了个领导,好烦,虽然对我没用影响. 其实,还是智商低,不懂人情世故,就像...算了,不说了,只能当自己傻. 最近好冷啊,十年不遇的寒冬. 心情有些压抑. 不玩游戏了,看了集康熙来了.小 ...

  4. homework-08

    这次作业是考察关于C++的一些使用,由于我的C++只掌握了基本功,所以我只有霸王硬上弓,勉强写写自己的浅见. 1. 理解C++变量的作用域和生命周期 对一个C++变量来说,有两个属性非常重要:作用域和 ...

  5. JSP学习初体验

    JSP简介: 1)JSP--Java Server Pages 2)拥有servlet的特性与优点(本身就是一个servlet) 3)直接在HEML中内嵌JSP代码 4)JSP程序由JSP Engin ...

  6. python challenge第1关--NoteBook上的“乱码”

    在 python challenge第0关中已经得到第1关的地址了: http://www.pythonchallenge.com/pc/def/map.html 一.观察地址栏和标签: What a ...

  7. android使用mount挂载/system/app为读写权限,删除或替换系统应用

    注意:以下代码中#开头的则为需要执行的shell命令,其他的为打印的结果.#代表需要使用ROOT权限(su)执行,所以想要修改您android手机某个目录挂载为读写,首先需要有ROOT权限! 先要得到 ...

  8. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  9. python的sys.path

    python检测不到模块: No module named 是因为模块没有在sys.path中,查看sys.path的方法 import sys sys.path 发现确实没有加载到模块. windo ...

  10. AOE关键路径

    这个算法来求关键路径,其实就是利用拓扑排序,首先求出,每个节点最晚开始时间,再倒退求每个最早开始的时间. 从而算出活动最早开始的时间和最晚开始的时间,如果这两个时间相等,则为关键路径. 时间复杂度为O ...