android学习日记03--常用控件ListView
常用控件
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的更多相关文章
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件tabSpec/tabHost
常用控件7.TabSpec和TabHost 比较常用的控件,感觉手机QQ的整体布局就是这个,只不过tab放在底部而已.TabSpec相当于浏览器的分页,而TabHost就相当于分页的集合TabSpec ...
- android学习日记03--常用控件progressbar/seekbar
常用控件 5.progressbar 进度条,比较常用的组件,在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度.一个进度条也 ...
- Android学习笔记_30_常用控件使用
一.状态栏通知(Notification): 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息.发送消息的代码如下: public void sendNotice(View v){ int ic ...
- Android布局属性与常用控件
一.Android常用布局属性 1. LinearLayout的特有属性 android:orientation:设置布局排列方式 android:layout_weight:设置所占布局的权重 ...
- Android SDK提供的常用控件Widget “常用控件”“Android原生”
Android提供一个标准的视图工具箱来帮助创建简单的UI界面.通过使用这些控件(必要时,可以对这些控件进行修改). 创建一个简单的.xml文件,从预览窗口可以看到Android SDK提供的原生控件 ...
- Android开发UI之常用控件的使用
1.日期选择控件 DatePickerDialog 代码: btnChooseDate=(Button) findViewById(R.id.btnChooseDate); btnChooseDate ...
随机推荐
- java中线程队列BlockingQueue的用法
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利.本文 ...
- 《C#并行编程高级教程》第9章 异步编程模型 笔记
这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...
- Delphi 打印
procedure TForm1.PrinterSetupExecute(Sender: TObject);begin PrinterSetupDialog1.Execute;end; procedu ...
- ajax post方法
定义和用法 post() 方法通过 HTTP POST 请求从服务器载入数据. 语法 jQuery.post(url,data,success(data, textStatus, jqXHR),dat ...
- Webdriver API (一)
(转载) 1.1 下载selenium2.0的包 官方download包地址:http://code.google.com/p/selenium/downloads/list 官方User Guid ...
- asp.net文本编辑器(FCKeditor)
FCKeditor介绍 FCKeditor是一个功能强大支持所见即所得功能的文本编辑器,可以为用户提供微软office软件一样的在线文档编辑服务.它不需要安装任何形式的客户端,兼容绝大多数主流浏览器, ...
- -Xms 和 -Xmx 不能设置的太大
之前我一直有一个疑问,就是-Xms 和 -Xmx不是设置的越大越好吗?现在才明白怎么回事. 通过在命令行中执行 java 或者启动某种基于 Java 的中间件来运行 Java 应用程序时,Java 运 ...
- python join和split和strip用法
python join 和 split方法的使用,join用来连接字符串,split恰好相反,拆分字符串的. strip()为去除开头结尾指定的字符,空着时是去除空白字符\t,\n,\r意思 1.jo ...
- CodeForces 149D Coloring Brackets 区间DP
http://codeforces.com/problemset/problem/149/D 题意: 给一个给定括号序列,给该括号上色,上色有三个要求 1.只有三种上色方案,不上色,上红色,上蓝色 2 ...
- android NDK 实用学习(二)-java端对象成员赋值和获取对象成员值
1,关于java端类及接口定义请参考: android NDK 实用学习-获取java端类及其类变量 2,对传过来的参数进行赋值: 对bool类型成员进行赋值 env->SetBooleanF ...