android开发之路08(ListView&Adapter)
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)的更多相关文章
- Android开发之 。。各种Adapter的用法
同样是一个ListView,可以用不同的Adapter让它显示出来,比如说最常用的ArrayAdapter,SimpleAdapter,SimpleCursorAdapter,以及重写BaseAdap ...
- android开发之路09(浅谈SQLite数据库01)
1.SQLite数据库: SQLite 是一个开源的嵌入式关系数据库,实现自包容.零配置.支持事务的SQL数据库引擎. 其特点是高度便携.使 用方便.结构紧凑.高效.可靠. 与其他数据库管理系统不同, ...
- Toast显示图文界面——Android开发之路1
Toast的多种使用方法 Toast其实是一个功能特别强大的组件,不仅仅可以吐司一个文本内容,还可以吐司图片以及图文混排的界面.具体用法如下: 第一种:简单的纯文本内容的吐司: Toast.makeT ...
- 菜单(Menu)的三中创建方式——Android开发之路2
菜单的三种创建方式 一.OptionsMenu---选项菜单 Android应用中的菜单默认是隐藏的,只有当用户点击手机上的MENU键,系统才会显示菜单.这种菜单叫做选项菜单(Options Menu ...
- Android中隐藏顶部状态栏的那些坑——Android开发之路3
Android中隐藏顶部状态栏的那些坑 先看看常规的隐藏状态栏的方法: 方法一: @Override protected void onCreate(Bundle savedInstanceState ...
- Android中点击隐藏软键盘最佳方法——Android开发之路4
Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...
- Intent的七大组件——Android开发之路5
------Intent------ Android中三个核心组件——Activity.Services.BroadCastProvider都是通过Intent传递参数. startActivity( ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- android开发之路13(实际开发常见问题及解决办法ING)
1.DDMS下无法浏览SDcard? 在做音乐播放器的时候,想通过eclipse中的DDMS视图将音频文件push到sd卡中,发现总是报错 :Failed to push selection: Rea ...
随机推荐
- [Hive - LanguageManual] Hive Default Authorization - Legacy Mode
Disclaimer Prerequisites Users, Groups, and Roles Names of Users and Roles Creating/Dropping/Using R ...
- 删除 Mac OS X 中“打开方式”里重复或无用的程序列表
如果右键菜单的「打开方式」里出现了已不存在的应用程序或者重复的项目,打开终端,执行以下命令: /System/Library/Frameworks/CoreServices.framework/Ver ...
- 大道至简—SQLite3 使用教学
OS X自从10.4后把SQLite这套相当出名的数据库软件,放进了作业系统工具集里.OS X包装的是第三版的SQLite,又称SQLite3.这套软件有几个特色: 软件属于公共财(pu ...
- 扩展KMP题目
hdu4333 /* 题意:字符串s[0..n-1],每次把最后一个字符放到前面,求形成的字符串比最初串分别小,相同,大于的个数 因为是为了练习扩展KMP所以肯定是扩展KMP, 为了循环方便,在后面复 ...
- hbase 学习笔记一---基本概念
说在前面,本文部分内容来源于社区官网经过适度翻译,部分根据经验总结,部分是抄袭网络博文,(不一一列举引用,在此致歉)一并列在一起,本文的目的,希望能总结出一些有用的,应该注意到的东西,基本 ...
- UVaLive 7370 Classy (排序,比较)
题意:给定 n 个人,和他们的数进行比较,从后面开始比,如果不够长,加middle接着比,直到没有,如果还相同比名字. 析:很水的题,就不用说了. 代码如下: #pragma comment(link ...
- HDU 1010 Tempter of the Bone (DFS+剪枝)
题意:从S走到D,能不能恰好用T时间. 析:这个题时间是恰好,并不是少于T,所以用DFS来做,然后要剪枝,不然会TEL,我们这样剪枝,假设我们在(x,y),终点是(ex,ey), 那么从(x, y)到 ...
- cloudstack4.2+xenserver6.0.2 详细配置攻略
搭建一台安装了XenServer的服务器 搭建一台安装了CloudStack的服务器用以管理云平台 可以使用CloudStack云平台进行虚拟机管理 使用远程桌面访问windows虚拟机 由于最近实验 ...
- iOS类别(Category)
iOS类别(Category)与扩展(Extension) 苹果的官方文档 Category在iOS开发中使用非常频繁.尤其是在为系统类进行拓展的时候,我们可以不用继承系统类,直接给系统类添加方法,最 ...
- 简单的玩玩etimer <contiki学习笔记之九>
好吧,我承认etimer有点小复杂,主要是它似乎和contiki的process搅在一起,到处都在call_process.那就先搜搜contiki下的etimer的example看看,然后再试着写一 ...