android 显示int组件,从零开始学android(ListView数据列表显示组件.二十一.)

与滚动视图(ScrollView)类似的还有一种列表组件(ListView),可以将多个组件加入到ListView之中以达到组件的滚动显示效果,ListView组件本身也有对应的ListView类支持,可以通过操作ListView类以完成对此组组件的操作,ListView类的继承结构如下所示:

java.lang.Object

? android.view.View

? android.view.ViewGroup

? android.widget.AdapterView

? android.widget.AbsListView

? android.widget.ListViewpublic ListView(Context context)

构造

创建ListView类的实例化对象

public void setAdapter(ListAdapter adapter)

普通

设置显示的数据

public ListAdapter getAdapter()

普通

返回ListAdapter

public void setOnItemSelectedListener (AdapterView.OnItemSelectedListener listener)

普通

当选项选中时触发此事件

要进行ListView数据的显示就必须使用一个Adapter数据的容器来存储和管理数据

Known Indirect Subclasses(已知的子类)

ArrayAdapter, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter,SpinnerAdapter, WrapperListAdapter

我们比较常用的是 ArrayAdapter,BaseAdapter和simpleAdapter

今天我们就来学习下这几种adapter与listView的使用

首先来看下ArrayAdapter

他支持一下集中构造方法

ArrayAdapter(context, textViewResourceId) 传入一个上下文对象,显示方式

ArrayAdapter(context, resource, textViewResourceId)传入一个上下文对象,资源ID,显示方式

ArrayAdapter(context, textViewResourceId, objects)传入一个上下文对象,显示格式,和显示数据(可以为object数组或者object 集合)

ArrayAdapter(context, resource, textViewResourceId, objects)传入一个上下文对象,资源ID,显示格式,和显示数据(可以为object数组或者object 集合)

下面使用前面做过的列子类进行一下简单的讲解

XMl文件

JAVA文件package com.example.listview;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;

public class MainActivity extends Activity {

private ListView listView;

private final String data[] = { "昵称:风飞雪未扬", "性别:男", "年龄:22岁", "学校:河南大学",

"系别 :教育科学学院", "邮箱:fangjaylong@gmail.com" };

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.activity_main);

listView = (ListView)this.findViewById(R.id.listview);

listView.setAdapter(new ArrayAdapter(MainActivity.this,

android.R.layout.simple_list_item_1, data));

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parents, View view, int position,

long id) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "您选择了"+data[position], Toast.LENGTH_SHORT).show();

}

});

}

}

显示效果

2014081709342058.png

下面来介绍下SimpleAdapter的使用

使用simpleAdapter来实现带标题的LIstVIew效果

构造方法如下:

SimpleAdapter (Context context, List extends Map> data, int resource, String[] from, int[] to)

基本的使用方法会在代码中给大家于详细的注释

Xml文件的配置

JAVA文件

package com.example.listview2;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import android.app.Activity;

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;

public class MainActivity extends Activity {

private final String Title[] = { "昵称:", "性别:", "年龄:", "学校:", "系别 :", "邮箱:" };// 标题数据

private final String contents[] = { "风飞雪未扬", "男", "22岁", "河南大学", "教育科学学院",// 内容数据

"fangjaylong@gmail.com" };

private ListView listView = null;

ArrayList> list = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.activity_main);

listView = (ListView) this.findViewById(R.id.listview);

list = new ArrayList>();// 实例化list

for (int i = 0; i < Title.length; i++) {// for循环向list中增加数据

Map map = new HashMap();// 创建map对象

map.put("title", Title[i]);

map.put("content", contents[i]);

list.add(map);// 将map数据增加到list中去

}

// 为ListView设置adapter

listView.setAdapter(new SimpleAdapter(MainActivity.this, // 上下文对象

list,// List数据

android.R.layout.simple_list_item_2,// ListView中数据的显示方式

new String[] { "title", "content" },// 此处的String数据必须与List当中的key值对应

new int[] { android.R.id.text1, android.R.id.text2 }));// android.R.layout.simple_list_item_2中提供的文本控件

// android. R.id.text1,android. R.id.text2 这两个属性是由

// android.R.layout.simple_list_item_2这个系统布局提供的,大家可以尝试里面其他控件的使用

//为listView中的数据项设置单击事件

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int psition, long id) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this, "您选择了" +Title[psition]+ contents[psition],

Toast.LENGTH_SHORT).show();//土司提示

}

});

}

}效果图:

2014081709342061.png

上面使用的是android自带的显示效果,用户也可以根据自己的需要定制合适的显示效果

下面我们通过自定义的Layout实现图文混排的效果

2014081709342064.png

xml文件

自定义xml文件

JAVA文件配置

package com.example.lsitview3;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Map;

import android.app.Activity;

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;

public class MainActivity extends Activity {

private final String Title[] = { "昵称:", "性别:", "年龄:", "学校:", "系别 :", "邮箱:" };// 标题数据

private final String contents[] = { "风飞雪未扬", "男", "22岁", "河南大学", "教育科学学院",// 内容数据

"fangjaylong@gmail.com" };

private ListView listView = null;

private int image[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,

R.drawable.a4, R.drawable.a5, R.drawable.a6 };// 设置图片数据

ArrayList> list = null;// 将第二个参数设置为Object 便于接收其他类型的参数

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.activity_main);

listView = (ListView) this.findViewById(R.id.listView1);

list = new ArrayList>();// 实例化list

for (int i = 0; i < Title.length; i++) {// for循环向list中增加数据

Map map = new HashMap();// 创建map对象

map.put("image", image[i]);

map.put("title", Title[i]);

map.put("content", contents[i]);

list.add(map);// 将map数据增加到list中去

}

// 为ListView设置adapter

listView.setAdapter(new SimpleAdapter(MainActivity.this, // 上下文对象

list,// List数据

R.layout.custom,// ListView中数据的显示方式

new String[] { "image","title", "content" },// 此处的String数据必须与List当中的key值对应

new int[] { R.id.imageView1, R.id.textView1,R.id.textView2 }));// 自定义布局的控件id

// 为listView中的数据项设置单击事件

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> parent, View view,

int psition, long id) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this,

"您选择了" + Title[psition] + contents[psition],

Toast.LENGTH_SHORT).show();// 土司提示

}

});

}

}

最终效果

2014081709342165.png

BaseAdapter的使用

Known Direct Subclasses(已知子类)

ArrayAdapter, CursZ喎�"/kf/ware/vc/" target="_blank" class="keylink">vckFkYXB0ZXIsIFNpbXBsZUFkYXB0ZXKjrEFycmF5QWRhcHRlcjxUPjxicj4KCtPJvMyz0LnYz7W/ybz7U2ltcGxlQWRhcHRlcqOsQXJyYXlBZGFwdGVyPFQ+trzKx0Jhc2VBZGFwdGVytcTX08DgCjxicj4KCsq508NCYXNlQWRhcHRlcr/J0tTH4cvJyrXP1rbUyv2+3bXEz9TKvrLZ1/e6zbbUyv2+3cbky/vM2NX3tcTJ6NbDo6y908/CwLS1xMHQ19PO0sPHvtbNqLn9QmFzZUFkYXB0ZXLAtMno1sNpdGVttcSxs76w0dXJqwo8YnI+Cgq94bm5CjxpbWcgc3JjPQ=="/uploadfile/Collfiles/20140817/2014081709342167.png" alt="">

xml文件配置

自定义xml

JAVA文件的配置

package com.example.listview;

import android.app.Activity;

import android.content.Context;

import android.graphics.Color;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.ImageView;

import android.widget.ListView;

import android.widget.TextView;

import android.widget.Toast;

public class MainActivity extends Activity {

private ListView listView;

private Myadapter adapter;

private final String titles[] = { "昵称:", "性别:", "年龄:", "学校:", "系别 :", "邮箱:" };// 标题数据

private final String contents[] = { "风飞雪未扬", "男", "22岁", "河南大学", "教育科学学院",

"fangjaylong@gmail.com" };// 内容数据

private int images[] = { R.drawable.a1, R.drawable.a2, R.drawable.a3,

R.drawable.a4, R.drawable.a5, R.drawable.a6 };// 图片数据

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

listView = (ListView) this.findViewById(R.id.listView1);

adapter = new Myadapter(this);

listView.setAdapter(adapter);

// 设置选项的监听事件

listView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView> arg0, View view,

int position, long id) {

// TODO Auto-generated method stub

Toast.makeText(MainActivity.this,

"你选择了:" + titles[position] + contents[position],

Toast.LENGTH_LONG).show();// 土司提示

}

});

}

class Myadapter extends BaseAdapter {

// 定义颜色,这里定义了两种交替显示,读者可以定义任意颜色

private int color[] = { Color.CYAN, Color.GREEN };

private Context myContext;

// 构造方法传递Context对象,也可以使用 getApplicationContext()来获取

public Myadapter(Context myContext) {

this.myContext = myContext;

}

@Override

public int getCount() {

// TODO Auto-generated method stub

return titles.length;// 返回列表选项的个数

}

@Override

public Object getItem(int position) {

// TODO Auto-generated method stub

return position;// 返回当前位置

}

@Override

public long getItemId(int position) {

// TODO Auto-generated method stub

return position;// 返回选中ID

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// 获得颜色数组的id 0或1

int colorId = position % color.length;

// 通过缓存convertView,这种利用缓存contentView的方式可以判断如果缓存中不存在View才创建View,如果已经存在可以利用缓存中的View,提升了性能

if (convertView == null) {

// 获得View对象

convertView = LayoutInflater.from(myContext).inflate(

R.layout.my_adapter_view, null);

}

// 获得组件

ImageView image = (ImageView) convertView

.findViewById(R.id.imageView1);

TextView title = (TextView) convertView

.findViewById(R.id.textView1);

TextView content = (TextView) convertView

.findViewById(R.id.textView2);

// 设置组件信息

image.setImageResource(images[position]);

title.setText(titles[position]);

content.setText(contents[position]);

convertView.setBackgroundColor(color[colorId]);

// 返回装载后的view

return convertView;

}

}

}

最终效果

2014081709342169.png

这样listView与adapter就基本上讲完了,在开发一般只会用到这么多,希望读者好好掌握

以上的所有代码基本都有注释,看不明白的可以在下方留言,我会在第一时间进行回复

下节预报:

SeekBar拖动条组件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值