常用控件

8、ListView
  列表视图,比如游戏的排行榜。列表数据可以根据屏幕大小自适应

列表的显示需要三个元素:

a、ListVeiw:用来展示列表的View。

b、适配器:用来把数据映射到ListView上的中介。

c、数据:具体的将被映射的字符串,图片,或者基本组件。

ListView用到两种适配器:
1、ArrayAdapter--简单适配器,只显示文字

2、SimpleAdapter--自定义适配器,可以显示自定义内容

3、SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来,暂时不讲。

使用简单适配器可直接
new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
this:当前context
android.R.layout.simple_list_item_1是系统的布局文件
list:ListView的各项数据

SimpleAdapter各项参数
new SimpleAdapter(context, data, resource, from, to)
context:当前context内容
data:ListView的各项数据
resource:ListView的每项布局
from:ListView的组件索引
to:ListView的组件ID
如:
new SimpleAdapter(MainActivity.this, list, R.layout.activity_main, new String[] {"item1","item2","item3","item4","item5"}
, new int[] {R.id.iv,R.id.bigtv,R.id.smalltv,R.id.btn,R.id.cb});

但是SimpleAdapter 不能触发组件的事件,还需
自己写适配器继承BaseAdapter

BaseAdapter主要有四个方法
getCount --列表每一项的长度
getItem
getItemId
getView --绘制每一项的具体组件

例子演示自定义MyAdapter

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
>
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"
android:id="@+id/bigtv"
/> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="10sp"
android:id="@+id/smalltv"
/> </LinearLayout> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button"
android:id="@+id/btn"
android:focusable="false"
/> <CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cb"
android:focusable="false"
/> </LinearLayout>

布局文件要特别说明两个属性
android:textSize="10sp" 设置text的大小
android:focusable="false" 设置焦点属性不可见

 package com.example.listview2;

 import java.util.List;
import java.util.Map; import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.ImageView;
import android.widget.TextView; public class MyAdapter extends BaseAdapter { private LayoutInflater mInflater;
private List<Map<String, Object>> list;
private int layId;
private String flag[];
private int itemId[]; public MyAdapter(Context context, List<Map<String, Object>> list,
int layId, String[] flag, int itemId[]) {
this.mInflater = LayoutInflater.from(context);
this.list = list;
this.layId = layId;
this.flag = flag;
this.itemId = itemId;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
} @Override
public View getView(int arg0, View arg1, ViewGroup arg2) {
// TODO Auto-generated method stub
arg1 = mInflater.inflate(layId, null);
for (int i = 0; i < flag.length; i++) {
if (arg1.findViewById(itemId[i]) instanceof ImageView) {
ImageView iv = (ImageView)arg1.findViewById(itemId[i]);
iv.setBackgroundResource((Integer) list.get(arg0).get(flag[i]));
}else if (arg1.findViewById(itemId[i]) instanceof TextView) {
TextView tv = (TextView)arg1.findViewById(itemId[i]);
tv.setText((String)list.get(arg0).get(flag[i]));
}
} ((Button) arg1.findViewById(R.id.btn))
.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AlertDialog.Builder(MainActivity.ma)
.setTitle("自定义SimpleAdapter")
.setMessage("按钮成功触发监听事件!")
.show();
}
});
CheckBox cb = (CheckBox) arg1.findViewById(R.id.cb); cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
new AlertDialog.Builder(MainActivity.ma)
.setTitle("自定义 adapter")
.setMessage("触发选择框")
.show();
}
}); return arg1;
} }

MyAdapter代码里
new AlertDialog.Builder(MainActivity.ma)
.setTitle("自定义 adapter")
.setMessage("触发选择框")
.show();

表示弹出对话框,与Toast不同的是 该对话框要按返回才会退出,而Toast是一闪而过的,对话框在下一讲详细阐述
MainActivity.ma是定义在MainActivity的静态变量指向this自己

MainActivity代码

 package com.example.listview2;

 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.widget.ListView;
import android.widget.SimpleAdapter; public class MainActivity extends Activity {
private ListView lv;
private List<Map<String, Object>> list;
//private SimpleAdapter sp;
public static MainActivity ma;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ma = this; lv = new ListView(this); list = new ArrayList<Map<String,Object>>(); Map<String, Object> map = new HashMap<String, Object>();
map.put("item1", R.drawable.ic_launcher);
map.put("item2", "bigtv");
map.put("item3", "smalltv"); list.add(map); //sp = new SimpleAdapter(MainActivity.this, list, R.layout.activity_main, new String[] {"item1","item2","item3","item4","item5"}, new int[] {R.id.iv,R.id.bigtv,R.id.smalltv,R.id.btn,R.id.cb});
//lv.setAdapter(sp); // --使用自定义适配器,可监听其ListView中每一项的事件监听
MyAdapter adapter = new MyAdapter(this, list, R.layout.activity_main, new String[] {"item1","item2","item3"}, new int[] {R.id.iv,R.id.bigtv,R.id.smalltv});
// 为列表视图设置适配器(将数据映射到列表视图中)
lv.setAdapter(adapter);
// //显示列表视图 this.setContentView(lv); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

运行效果

android学习日记03--常用控件ListView的更多相关文章

  1. android学习日记03--常用控件Dialog

    常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...

  2. android学习日记03--常用控件button/imagebutton

    常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...

  3. android学习日记03--常用控件checkbox/radiobutton

    常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...

  4. android学习日记03--常用控件tabSpec/tabHost

    常用控件7.TabSpec和TabHost 比较常用的控件,感觉手机QQ的整体布局就是这个,只不过tab放在底部而已.TabSpec相当于浏览器的分页,而TabHost就相当于分页的集合TabSpec ...

  5. android学习日记03--常用控件progressbar/seekbar

    常用控件 5.progressbar 进度条,比较常用的组件,在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也 ...

  6. Android学习笔记_30_常用控件使用

    一.状态栏通知(Notification): 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息.发送消息的代码如下: public void sendNotice(View v){ int ic ...

  7. Android布局属性与常用控件

    一.Android常用布局属性 1. LinearLayout的特有属性 android:orientation:设置布局排列方式   android:layout_weight:设置所占布局的权重  ...

  8. Android SDK提供的常用控件Widget “常用控件”“Android原生”

    Android提供一个标准的视图工具箱来帮助创建简单的UI界面.通过使用这些控件(必要时,可以对这些控件进行修改). 创建一个简单的.xml文件,从预览窗口可以看到Android SDK提供的原生控件 ...

  9. Android开发UI之常用控件的使用

    1.日期选择控件 DatePickerDialog 代码: btnChooseDate=(Button) findViewById(R.id.btnChooseDate); btnChooseDate ...

随机推荐

  1. Compass 编译.scss文件的问题

    compass 命令编译scss文件存在一个问题: 不能对"_"下划线开头的scss文件名称的文件进行编译.将"_"去掉就可以啦

  2. TCP编程(七)

    此为网络编程的一个系列,后续会把内容补上...

  3. OK335xS LAN8710 phy driver hacking

    /******************************************************************** * OK335xS LAN8710 phy driver h ...

  4. hibernate注解影射表

    @MappedSuperclass的用法 用在实体的继承过程中的父类上: 父类Cat package com.xj.model; import javax.persistence.GeneratedV ...

  5. 无法找到.exe的调试信息

    原文:无法找到.exe的调试信息 前天重装了电脑,并配置了Visual Studio2005的VC正则库,boost/regex,运行速度马上快了三倍吧,到底是怎么快的,我还真说不清楚,因为电脑这玩意 ...

  6. BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法

    要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...

  7. HDU 1078 FatMouse and Cheese 记忆化搜索DP

    直接爆搜肯定超时,除非你加了某种凡人不能想出来的剪枝...555 因为老鼠的路径上的点满足是递增的,所以满足一定的拓补关系,可以利用动态规划求解 但是复杂的拓补关系无法简单的用循环实现,所以直接采取记 ...

  8. 树-伸展树(Splay Tree)

    伸展树概念 伸展树(Splay Tree)是一种二叉排序树,它能在O(log n)内完成插入.查找和删除操作.它由Daniel Sleator和Robert Tarjan创造. (01) 伸展树属于二 ...

  9. UVA1673 str2int(SAM)

    [题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=51267 [题意] 给定n个字符串,计算所有忽略前导0的子串形成 ...

  10. Docker系列(九)Kubernetes安装

    环境: A.B两天机器A机器IP:192.169.0.104,B机器IP:192.168.0.102,其中A为Master节点,B为Slave节点 操作系统:Centos7 Master与Slave节 ...