博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通用的Adapter
阅读量:6610 次
发布时间:2019-06-24

本文共 6985 字,大约阅读时间需要 23 分钟。

activity_main.xml

item_app.xml

AppInfo

package com.example.app3_listview;import android.graphics.drawable.Drawable;public class AppInfo {	private Drawable icon;	private String appName;	private String packageName;	public AppInfo(Drawable icon, String appName, String packageName) {		super();		this.icon = icon;		this.appName = appName;		this.packageName = packageName;	}	public AppInfo() {		super();	}	public Drawable getIcon() {		return icon;	}	public void setIcon(Drawable icon) {		this.icon = icon;	}	public String getAppName() {		return appName;	}	public void setAppName(String appName) {		this.appName = appName;	}	public String getPackageName() {		return packageName;	}	public void setPackageName(String packageName) {		this.packageName = packageName;	}	@Override	public String toString() {		return "AppInfo [icon=" + icon + ", appName=" + appName				+ ", packageName=" + packageName + "]";	}}
MainActivity

package com.example.app3_listview;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.content.Context;import android.content.Intent;import android.content.pm.PackageManager;import android.content.pm.ResolveInfo;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.Toast;import com.example.adapter.base.CommonBaseAdapter;import com.example.adapter.base.ViewHolder;public class MainActivity extends Activity {	private ListView lv_main_apps;	private List
data; private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 载入视图--仅仅有一个listview setContentView(R.layout.activity_main); // 获取id lv_main_apps = (ListView) findViewById(R.id.lv_main_apps); // 得到数据 data = getAllAppInfos(); // 创建adapter adapter = new MyAdapter(this, data, R.layout.item_app); // 设置adapter显示 lv_main_apps.setAdapter(adapter); // 设置每项(item)的点击监听 lv_main_apps .setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView
parent, View view, int position, long id) {// position 点击的下标 // 得到数据 AppInfo appInfo = data.get(position); String appName = appInfo.getAppName(); // 显示 Toast.makeText(MainActivity.this, appName, 0).show(); } }); } /* * 得到手机中全部应用信息的列表 AppInfo */ protected List
getAllAppInfos() { List
list = new ArrayList
(); // 得到应用的packgeManager PackageManager packageManager = getPackageManager(); // 创建一个主界面的intent Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); // 得到包括应用信息的列表 List
ResolveInfos = packageManager.queryIntentActivities( intent, 0); // 遍历 for (ResolveInfo ri : ResolveInfos) { // 得到包名 String packageName = ri.activityInfo.packageName; // 得到图标 Drawable icon = ri.loadIcon(packageManager); // 得到应用名称 String appName = ri.loadLabel(packageManager).toString(); // 封装应用信息对象 AppInfo appInfo = new AppInfo(icon, appName, packageName); // 加入到list list.add(appInfo); } return list; } /** * 继承自CommonBaseAdapter的adapter类 */ class MyAdapter extends CommonBaseAdapter
{ public MyAdapter(Context context, final List
data, int layoutId) { super(context, data, layoutId, new Convert() { @Override public void convert(ViewHolder holder, int position) { AppInfo appInfo = data.get(position); holder.setText(R.id.tv_item_name, appInfo.getAppName()).setImageDrawable(R.id.iv_item_icon,appInfo.getIcon()); } }); } }}
CommonBaseAdapter

package com.example.adapter.base;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * 通用的baseAdapter */public abstract class CommonBaseAdapter
extends BaseAdapter { private Context context; private List
data; private int layoutId; public Convert convert; /** * 设置视图数据的抽象方法, 由详细的adapter子类来实现 */ public interface Convert{ void convert(ViewHolder holder, int position); } public CommonBaseAdapter(Context context, List
data, int layoutId,Convert convert) { this.context = context; this.data = data; this.layoutId = layoutId; this.convert = convert; } @Override public int getCount() { return data.size(); } @Override public T getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { //得到Viewholder对象 ViewHolder holder = ViewHolder.getHolder(context, convertView, layoutId); //调用未实现的抽象方法设置数据 convert.convert(holder, position); //返回holder中的convertView return holder.getConvertView(); }}
ViewHolder

package com.example.adapter.base;import android.content.Context;import android.graphics.drawable.Drawable;import android.util.SparseArray;import android.view.View;import android.widget.ImageView;import android.widget.TextView;/** * 通用的ViewHolder类 */public class ViewHolder {	// 代表当前行的view对象	private View itemConvertView;	// 用来替代Map
的容器, 效率比map高 private SparseArray
views; /******************************************************************* * 得到ViewHolder对象 context--layoutId:这个是用来构造时候,须要动态载入布局文件 * convertview:是可复用的item布局 */ public static ViewHolder getHolder(Context context, View convertView, int layoutId) { /** * 假设没有可复用的布局。就创建本类对象 假设有的话,就通过getTag获取 * */ if (convertView == null) { return new ViewHolder(context, layoutId); } else { ViewHolder holder = (ViewHolder) convertView.getTag(); return holder; } } /** * 构造方法 载入布局文件。将本类标记即viewholder保存到itemConvertView中 */ private ViewHolder(Context context, int layoutId) { this.itemConvertView = View.inflate(context, layoutId, null); this.itemConvertView.setTag(this); views = new SparseArray
(); } /** * 得到当前相应的convertView */ public View getConvertView() { return itemConvertView; } /************************* * %%%%%%%%%%%%******************************** 依据视图id得到相应的视图对象 */ public
T getView(int viewId) { View view = views.get(viewId); if (view == null) { view = itemConvertView.findViewById(viewId); views.put(viewId, view); } return (T) view; } // /** * 设置文本数据 */ public ViewHolder setText(int viewId, String text) { TextView textView = getView(viewId); textView.setText(text); return this; } /** * 设置drawable图片 */ public ViewHolder setImageDrawable(int viewId, Drawable drawable) { ImageView imageView = getView(viewId); imageView.setImageDrawable(drawable); return this; } /** * 设置资源图片 */ public ViewHolder setImageResource(int viewId, int resourceId) { ImageView imageView = getView(viewId); imageView.setImageResource(resourceId); return this; }}
你可能感兴趣的文章
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
查看>>
免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
查看>>
Unity进阶技巧 - 动态创建UGUI
查看>>
【简单易懂的AMV图文教程-2】VEGAS基础进阶——认识关键帧
查看>>
使用css打造形形色色的形状!
查看>>
Spring切面处理
查看>>
浅谈CPU和GPU的区别
查看>>
开源大数据利器汇总
查看>>
从知名外企到创业公司做CTO是一种怎样的体验?
查看>>
Oracle 表空间和用户权限管理【转】
查看>>
如何安装nginx第三方模块
查看>>
LXC学习实践(3)快速体验第一个容器
查看>>
转:winform_webApiSelfHost及 OWIN WebAPI Service
查看>>
分库分表的理想方案
查看>>
sumatrapdf 软件介绍
查看>>
CentOS开启和关闭防火墙
查看>>
值得学习的C语言开源项目
查看>>
AutoCAD如何设置A0A1图纸
查看>>
maven
查看>>
debug命令
查看>>