AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表
代码请见SimpleAdapterDemo.zip。
步骤如下:
1、创建主布局文件
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingBottom="@dimen/activity_vertical_margin"
- android:paddingLeft="@dimen/activity_horizontal_margin"
- android:paddingRight="@dimen/activity_horizontal_margin"
- android:paddingTop="@dimen/activity_vertical_margin"
- tools:context=".MainActivity" >
- <ListView
- android:id="@+id/listview"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:divider="#00ff00"
- android:dividerHeight="2dp"
- android:headerDividersEnabled="false"
- />
- </RelativeLayout>
2、创建每个列表选项的视图
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/ll_listview"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
- <ImageView
- android:id="@+id/iv_header"
- android:layout_width="0dp"
- android:layout_height="40dp"
- android:layout_weight="1"
- android:contentDescription="@string/header"/>
- <LinearLayout
- android:id="@+id/ll_title_content"
- android:layout_width="0dp"
- android:layout_height="40dp"
- android:orientation="vertical"
- android:layout_weight="4">
- <TextView
- android:id="@+id/title"
- android:layout_width="match_parent"
- android:layout_height="20dp"
- android:background="#000000" />
- <TextView
- android:id="@+id/content"
- android:layout_width="match_parent"
- android:layout_height="20dp"
- android:background="#00ff00" />
- </LinearLayout>
- </LinearLayout>
3、创建主类
- package com.ljh.listviewdemo;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.ListView;
- import android.widget.SimpleAdapter;
- import android.widget.Toast;
- import android.app.Activity;
- public class MainActivity extends Activity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // (1)创建要显示的文本内容
- String[] arr = { "header", "title", "content" };
- // (2)与使用ListActivity的最大区别:使用findViewById得到一个ListView
- ListView lv = (ListView) findViewById(R.id.listview);
- // (3)创建ArrayAdapter,其中第二个参数resource:The resource ID for a layout file
- // containing a TextView to use when instantiating views.是要以一个layout作为
- // 参数,且此layout需要包含textview。
- /*
- * ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
- * R.layout.list, arr);
- */
- String[] titles = { "title1", "title2", "title3", "title4" };
- String[] contents = { "content1", "content2", "content3", "content4" };
- int[] headers = { R.drawable.p1, R.drawable.p2, R.drawable.p3,
- R.drawable.p4 };
- List<Map<String, Object>> datas = new ArrayList<Map<String, Object>>();
- /*
- * Parameters:
- * context The context where the View associated with this
- * SimpleAdapter is running data A List of Maps. Each entry in the List
- * corresponds to one row in the list. The Maps contain the data for
- * each row, and should include all the entries specified in "from"
- * resource Resource identifier of a view layout that defines the views
- * for this list item. The layout file should include at least those
- * named views defined in "to" from A list of column names that will be
- * added to the Map associated with each item. to The views that should
- * display column in the "from" parameter. These should all be
- * TextViews. The first N views in this list are given the values of the
- * first N columns in the from parameter.
- */SimpleAdapter adapter = new SimpleAdapter(this, datas,
- R.layout.list, arr, new int[] { R.id.iv_header, R.id.title,
- R.id.content });
- for (int i = 0; i < titles.length; i++) {
- Map<String, Object> map = new HashMap<String, Object>();
- map.put("title", titles[i]);
- map.put("content", contents[i]);
- map.put("header", headers[i]);
- datas.add(map);
- }
- // (4)为ListActivity设置adapter.
- lv.setAdapter(adapter);
- lv.setOnItemClickListener(new OnItemClickListener() {
- // 定义当某个选项被点击时的操作。
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- int position, long id) {
- Toast.makeText(MainActivity.this,
- position + " item is clicked.", Toast.LENGTH_LONG)
- .show();
- }
- });
- }
- }
1、使用SimpleAdapter与ArrayAdapter相比,它可以支持复杂的表项结构,而不只是单一的textview。
2、其创建过程的两个主要区别是:
(1)每个列表项的布局文件不一样
(2)创建SimpleAdapter的操作更为复杂,需要构建一个List<Map<String, Object>>。
AdapterView及其子类之四:基于ListView及SimpleAdapter实现列表的更多相关文章
- AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表
见归档项目ListViewDemo.zip. 基本步骤如下: 1.创建主布局文件,里面包含一个ListView元素. <RelativeLayout xmlns:android="ht ...
- Android开发自学笔记(Android Studio)—4.4 AdapterView及其子类
一.引言 AdapterView本身是一个抽象类,而它派生的子类在用法上也基本相似,只是在显示上有一定区别,因此把他们也归为一类. AdapterView具有如下特征: Ada ...
- 第3组UI组件:AdapterView及其子类
1 AdapterView类简介 1.1 AdapterView组件是一组重要的组件,AdapterView本身是一个抽线类,实际使用更多的都是Adapter相关子类,AdapterView具有如下特 ...
- android-UI组件(四):AdapterView及其子类
http://blog.csdn.net/litianpenghaha/article/details/23270881 AdapterView组件是一组重要的组件,AdapterView本身是一个抽 ...
- UI组件之AdapterView及其子类关系,Adapter接口及事实上现类关系
AdapterView本身是一个抽象基类,它派生的的子类在使用方法上十分类似.AdapterView直接派生的三个子类:AbsListView.AbsSpinner,AdapterViewAnimat ...
- Android学习笔记(23):列表项的容器—AdapterView的子类们
AdapterView的子类的子类ListView.GridView.Spinner.Gallery.AdapterViewFlipper和StackView都是作为容器使用,Adapter负责提供各 ...
- 滚动视图、列表视图[ListView、SimpleAdapter类]
滚动视图 <ScrollView android: layout_width="fill_parent" android: layout_height="fill_ ...
- 第四组UI组件:AdapterView及子类
AdapterView组件是一组重要的组件,AdapterView本省是一个抽象基类,它派生的子类在用法上十分相似,只是显示界面与一定的区别,因此这次针对它们的共性集中讲解,并突出介绍他们的区别. A ...
- Android的AdapterView及其子类简介-android学习之旅(二十三)
AdapterView简介 AdapterView组件是一类非常重要的组件,AdapterView本身是一根抽象基类,继承于ViewGroup,用法十分相似,只是显示形式不一样,因此同意讲解. Ada ...
随机推荐
- [原创]Windows下更改特定后缀名以及特定URL前缀的默认打开方式
Windows下,特定后缀名的文件会由特定的应用程序来运行,比如双击readme.txt,通常情况下会由Windows自带的notepad.exe(记事本)打开文件.如果现在安装了记事本以外的其他文本 ...
- TextView之一:子类的常用属性
TextView常见的子类包括EditText,Button,CheckBox, RadioButton等. 1.EditText EditText继承自TextView,因此TextView所有属性 ...
- jQuery模糊选择
属性字头选择器(Attribute Contains Prefix Selector) jQuery 属性字头选择器的使用格式是 jQuery(‘[attribute|=value]‘) ,例如 jQ ...
- label的for属性与inputde的id元素绑定
<form> <label for="male">Male</label> <input type="radio" n ...
- ZendFramework 环境部署
查看源码 int_autoloader.php 文件中,发现应用了一个 AutoloaderFactory 的命名空间,路径写得是相对路径,所以需要在 php.ini 中定义一个 inclde_pat ...
- What is an http upgrade?
HTTP Upgrade is used to indicate a preference or requirement to switch to a different version of HTT ...
- Ubuntu14.0.4 64位安装ADT问题
将ADT 解压之后,新建Android工程后没有R文件: google之后说要安装 ia32-libs 提示如下: 安装lib32z1 安装完成后,再次新建工程,报错如下: 编译存在问题:则继续安装以 ...
- Socket也有专门的Unicode版本
https://www.chilkatsoft.com/refdoc/wcppCkSocketWRef.html https://www.chilkatsoft.com/refdoc/vcCkSock ...
- java设计模式--创建模式--工厂方法
工厂方法定义: 工厂方法 概述 定义一个用于创建对象的接口,让子类决定实例化哪一个类.FactoryMethod使一个类的实例化延迟到其子类. 适用性 .当一个类不知道它所必须创建的对象的类的时候. ...
- UVA_Cubic Eight-Puzzle UVA 1604
Let's play a puzzle using eight cubes placed on a 3 x 3 board leaving one empty square.Faces of cube ...