列表ListView介绍和实例





 1.ListView  -- ListActivity -- ListAdapter

 2.ArrayAdapter结合ListView进行显示

 3.SimpleAdapter结合ListView进行显示

 4.处理单击ListView事件,处理选择ListView的事件

 5.使用SimpleCursorAdapter与ListView进行关联



 ListView :



要让一个ListView显示出来须要的3个条件:



1.ListView  --- 须要被显示的列表

2.Data      --- 和ListView绑定的数据,通常是一个Cursor或字符串数组

3.ListAdapter --- data和ListView的桥梁  --- 适配作用





经常使用ListAdapter子类:





ArrayAdapter     ---  数组适配  ---- ListAdapter的直接子类





  ArrayList<类型>(context,int itemLayout, data)

  context:上下文环境

  itemLayout:自己定义的每一项要显示的Layout

  data:要显示的数据

 样例:

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

   android.R.layout.simple_list_item_1  --- 使用Android自带的 每一项Listview显示布局   -- 实际应用中经常自己定义此item布局





  特别注意:itemLayout  --- ListView中每一项(行)的布局  ---  能够引用系统自带的,但 实际项目中很多其它是使用自己定义的item布局





  系统自带的经常使用item布局:

  android.R.layout.simple_list_item_1    ----- 每一项仅仅有一个TextView

  android.R.layout.simple_list_item_1    ----- 每一项仅仅有两个TextView

  android.R.layout.simple_list_item_single_choice   ----- 每一项有一个TextView。但这一项能够被选择





SimpleAdapter    ---  简单适配  ---- ListAdapter的直接子类

 

 通过SimpleAdapter能够让ListView其中的每一项内容更加个性化,

 通常将ListView中某项的布局信息写在XML文件里。这个布局文件通过R.layout.XX -- 引入到ListView中

 

 SimpleAdapter是ArrayList和Listview之间的桥梁  

 ArrayList中的每一项都是一个Map<String,?>类型。

ArrayList其中的每一项Map对象都和ListView其中的一项进行数据绑定和一一相应





SimpleAdapter的构造器:

public SimpleAdapterK(Context context, List<? extends Map<String,?

>> data, int resource, String[] from , int[] to)





context  -- 上下文

data     -- 基于Map的List,Data里面的每一项都和ListIView里的每一项相应。Data里面的每一项都是Map类型。

            这个Map类中包括了ListView每一行须要的数据  --- 经常使用  data = new ArrayList<Map<String,Object>>();

resource -- 一个layout, 必须包括在to中出现的那些View,系统提供或自己定义layout布局都可。

            系统提供的有:android.R.layout.simpe_list_item_single_choice

                 android.R.layout.two_line_list_item

from     -- 数组名,每个名字是为了在ArrayList中的每个item中索引Map<String, Object>的Object用的

to       -- 这里面是一个TextView的数组。这些TextView以id形式表示。这鞋View必须是TextView





 

为ListView中的每一项加入事件处理:    OnItemClickListener 

 

OnItemClickListener listener = new OnItemClickListener() {





@Override

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

long id) {

setTitle(parent.getItemAtPosition(position).toString());

}

};



listView.setOnItemClickListener(listener);





说明:

onItemClick  --  回调函数。当用户单击ListView每一项时。自己主动运行

    parent     --- 被单击的ListView

    view       --- 用户操作的那一项

    position   --- 操作的item项在ListView中的位置

    id         --- 被选中的那一行的id





getItemAtPosition(position)  --- 通过position获得和这一行绑定的数据, 本例中仅仅是把改行内容作为title写出来

listView.setOnItemClickListener(listener)   --- 将监听器注冊到ListView中

实例代码:

ArrayAdapter与ListView

package com.example.androidbasicdemo1;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView; /**
* ArrayList<类型>(context,int itemLayout, data)
* context:上下文环境
* itemLayout:自己定义的每一项要显示的Layout
* data:要显示的数据
*
* 样例:
* ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data);
android.R.layout.simple_list_item_1 --- 使用Android自带的 每一项Listview显示布局 -- 实际应用中经常自己定义此item布局 * @author JayHe
*
*/
public class ArrayAdapterListViewActivity extends Activity { private ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_array_adapter_list_view); //从xml布局文件里获得ListView对象
listView = (ListView) findViewById(R.id.arrayadapterlistView1); //定义要显示的数据
String[] data = getResources().getStringArray(R.array.items_country);
//定义适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ArrayAdapterListViewActivity.this, android.R.layout.simple_list_item_1, data); //为ListView加入适配器
listView.setAdapter(adapter);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.array_adapter_list_view, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} }

SimpleAdapter与ListView

package com.example.androidbasicdemo1;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter; public class SimpleAdapterListViewActivity extends Activity { private List<Map<String, Object>> data; private ListView listView; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_adapter_list_view); listView = (ListView) findViewById(R.id.simpleadapterlistView1); SimpleAdapter adapter = new SimpleAdapter(SimpleAdapterListViewActivity.this, prepareData(), R.layout.slef_list_item1,new String[]{"姓名","性别"}, new int[]{R.id.selflistview1textView1,R.id.selflistview1textView2}); listView.setAdapter(adapter); OnItemClickListener listener = new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
setTitle(parent.getItemAtPosition(position).toString());
}
}; listView.setOnItemClickListener(listener); } private List<Map<String, Object>> prepareData(){
data = new ArrayList<Map<String, Object>>();
Map<String, Object> item;
item = new HashMap<String, Object>();
item.put("姓名", "吴欢小盆友");
item.put("性别", "女");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "冯荣小朋友");
item.put("性别", "女");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "夏明");
item.put("性别", "男");
data.add(item);
item = new HashMap<String, Object>();
item.put("姓名", "小华");
item.put("性别", "男");
data.add(item);
return data;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.simple_adapter_list_view, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
} }

Android开发具体解释之ListView具体解释一的更多相关文章

  1. Android开发之自定义的ListView(UITableViewController)

    Android开发中的ListView, 顾名方法思义,就是表视图.表示图在iOS开发中就是TableView.两者虽然名称不一样,但是其使用方法,使用场景以及该控件的功能都极为相似,都是用来展示大量 ...

  2. Android开发中常用的ListView列表的优化方式ViewHolder

    在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就 ...

  3. Android开发学习之TabView选项卡具体解释 -- 基于Android4.4

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/he90227/article/details/24474197 直接上代码 -- 基于Android ...

  4. Android开发:自定义GridView/ListView数据源

    http://mobile.51cto.com/android-259861.htm 在开发中,我们常常会遇到比较复杂的GridView/ListView的布局,重新实现BaseAdapter不但能帮 ...

  5. Android开发--微信布局(ListView)基本运用

    ListView 1.ListVeiw 用来展示列表的View. 2.适配器 用来把数据映射到ListView上的中介. 3.数据    具体的将被映射的字符串,图片,或者基本组件. 根据列表的适配器 ...

  6. Android开发UI之给ListView设置布局动画效果

    1.通过JAVA代码添加,资源文件基本上不修改 XML文件,只添加了一个ListView,就不贴XML文件的代码了. java代码: public class MainActivity extends ...

  7. 50个Android开发技巧(24 处理ListView数据为空的情况)

         在移动平台上为用户展示数据的一个经常用法是将数据填充进一个List内,而此时须要注意的一点就是: 原文地址:(http://blog.csdn.net/vector_yi/article/d ...

  8. android开发中难免遇到listview刷新数据出现异常

    异常:java.lang.IllegalStateException: The content of the adapter has changed but ListView did not rece ...

  9. Android开发之漫漫长途 XIV——ListView

    该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...

随机推荐

  1. codeforces 278Div1 B题

    虚拟参赛的时候没想到是线段树,看到很多人都过了,也蛮着急的. 首先用二分+线段树的方法更新DP[i]:它表示以A[i]为结尾可以最前到哪个位置: 再用线段树计算ans[i]:它表示当前i个A元素可以最 ...

  2. ▲历史回眸--abbr和acronym的渊源

    网景和微软的浏览器之战早已淡去多年,最终以微软的IE浏览器胜出,特别是IE6的出现,一度成为世界浏览器的霸主,至今无人能敌.去年IE6荣获“终身成就奖”,真是实至名归.本文涉及的两个标签abbr和ac ...

  3. [BZOJ 2048] [2009国家集训队]书堆 【调和级数】

    题目链接:BZOJ - 2048 题目分析 只有一本书时,这本书的重心落在桌子边缘上,伸出桌面的长度就是 1/2. 有两本书时,第一本书的重心就落在第二本书的边缘上,两本书的重心落在桌子边缘上,两本书 ...

  4. 【整理】各种Python的IDE(集成开发环境)的总结和对比

    原地址:http://www.tuicool.com/articles/rMVJNn 原文  http://www.crifan.com/summary_common_python_ide_pyscr ...

  5. 算法练习之:Doubles

    Doubles Time Limit: 1000MS Memory Limit: 65536KB Problem Description As part of an arithmetic compet ...

  6. 【Uvalive 5834】 Genghis Khan the Conqueror (生成树,最优替代边)

    [题意] 一个N个点的无向图,先生成一棵最小生成树,然后给你Q次询问,每次询问都是x,y,z的形式, 表示的意思是在原图中将x,y之间的边增大(一定是变大的)到z时,此时最小生成数的值是多少.最后求Q ...

  7. [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)

    首先,vector 在VC 2008 中的实现比较复杂,虽然vector 的声明跟VC6.0 是一致的,如下:  C++ Code  1 2   template < class _Ty, cl ...

  8. 使用Qt实现简单的图片预览效果 good

    http://www.cnblogs.com/appsucc/archive/2012/02/28/2371506.html Qt之实现工具箱界面程序 http://www.cnblogs.com/a ...

  9. Android应用架构

    Android开发生态圈的节奏非常之快.每周都会有新的工具诞生,类库的更新,博客的发表以及技术探讨.如果你外出度假一个月,当你回来的时候可能已经发布了新版本的Support Library或者Play ...

  10. Android开源项目发现---ImageView 篇(持续更新)

    1. PhotoView 支持双击或双指缩放的ImageView 在ViewPager等Scrolling view中正常使用,相比上面的AndroidTouchGallery,不仅支持ViewPag ...