/**
*
*/
package org.lee.android;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.AlertDialog;
import android.app.ListActivity;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
* @author allin
*
*/
public class MyListView4 extends ListActivity {
private List<Map<String, Object>> mData;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mData = getData();
MyAdapter adapter = new MyAdapter(this);
setListAdapter(adapter);
}
private List<Map<String, Object>> getData() {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("title", "G1");
map.put("info", "google 1");
map.put("img", R.drawable.i1);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "G2");
map.put("info", "google 2");
map.put("img", R.drawable.i2);
list.add(map);
map = new HashMap<String, Object>();
map.put("title", "G3");
map.put("info", "google 3");
map.put("img", R.drawable.i3);
list.add(map);
return list;
}
// ListView 中某项被选中后的逻辑
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Log.v("MyListView4-click", (String)mData.get(position).get("title"));
}
/**
* listview中点击按键弹出对话框
*/
public void showInfo(){
new AlertDialog.Builder(this)
.setTitle("我的listview")
.setMessage("介绍...")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.show();
}
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
public class MyAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.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 position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
}
}
android ListView详解 源码实例



在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据集合,并且支持滚动操作。ListView的使用不仅可以节省屏幕空间,还能提供良好的用户体验。在这个源码实例中,我们将深入探讨ListView的实现,包括如何创建带图标和按钮的列表。 我们需要理解ListView的基本结构。ListView由多个列表项(List Item)组成,每个列表项通常是一个View或者一个自定义的ViewGroup,如LinearLayout或RelativeLayout。在Android中,我们通常通过Adapter来连接ListView和数据源,Adapter负责将数据转化为可显示的视图。 1. 创建Adapter:自定义一个继承自BaseAdapter的类,实现其中的四个关键方法: - getCount():返回数据源的大小,即ListView中列表项的数量。 - getItem(int position):返回指定位置的数据对象。 - getItemId(int position):返回指定位置的数据对象的唯一ID,通常用position作为ID。 - getView(int position, View convertView, ViewGroup parent):这是最重要的方法,它负责创建或复用列表项视图,并填充数据。 2. 布局设计:为列表项创建一个XML布局文件,可以包含ImageView、TextView和Button等组件。例如,如果我们要创建一个带图标的列表项,可以在布局文件中添加一个ImageView和一个TextView。 3. 设置Adapter:在Activity或Fragment中,实例化Adapter并将其设置给ListView。记得先初始化数据源,然后调用ListView的setAdapter()方法。 4. 事件处理:如果列表项中有按钮,需要为按钮添加点击事件监听器。这通常在getView()方法中完成,通过findViewById()找到按钮,然后设置OnClickListener。 5. 动态加载优化:当ListView内容很多时,为了提高性能,我们可以使用ViewHolder模式。ViewHolder是一个内部类,持有列表项布局中的各个视图引用,这样在getView()方法中就不需要每次都查找视图,从而减少了查找操作。 6. 交互效果:ListView还支持下拉刷新和上拉加载更多功能,可以通过SwipeRefreshLayout和LoadMoreFooter进行实现。同时,可以通过设置OnItemClickListener监听用户的点击事件,响应用户的选择操作。 7. 分组列表:如果数据是分组的,可以使用ExpandableListView,它支持展开和折叠子项。 8. 动画效果:可以通过Animation和Animator为ListView添加滑动、淡入淡出等动画效果,增强用户体验。 9. 自定义滚动条:可以通过setDivider()和setDividerHeight()方法自定义ListView的分割线,或者通过setScrollingCacheEnabled()控制滚动缓存,优化性能。 Android ListView是一个功能强大的组件,通过适配器机制和自定义布局,我们可以实现各种复杂的列表展示需求。掌握ListView的使用,对于Android开发者来说至关重要。通过实践这个源码实例,你将更深入地理解ListView的工作原理,并能灵活地应用于实际项目中。













































































- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- 拂晓happy2014-07-27还不错,可以参考
- manoel2012-09-25还行,可以运行起来。

- 粉丝: 9
- 资源: 57
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助



最新资源
- 数据挖掘与数据分析(财会专业适用)
- (源码)基于Python语言的智能微信机器人.zip
- 数学模型 案例指导与分析 配套源码
- itriton-uniapp-uniapp资源
- faQnet-机器学习资源
- (源码)基于Arduino平台的罗克莱客户端节流阀.zip
- PaddleTS-深度学习资源
- (源码)基于ObjectiveC的Arduino HEX文件导出工具.zip
- JeeSite-typescript资源
- (源码)基于MakeCode平台的简易游戏开发框架.zip
- (源码)基于嵌入式编程的TCP服务器客户端系统.zip
- UEShaderTool-UE开发资源
- RFID-RFID资源
- CSDN_ASSEMBLY_IMAGES-汇编语言资源
- AAGUI-C语言资源
- (源码)基于Java的多功能项目.zip


