通用的Adapter
来源:互联网 发布:破解摄像头软件下载 编辑:程序博客网 时间:2024/05/29 03:10
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/lv_main_apps" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" > </ListView></LinearLayout>
item_app.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="70dp" android:minHeight="70dp" android:orientation="horizontal" android:gravity="center_vertical"> <ImageView android:id="@+id/iv_item_icon" android:layout_width="70dp" android:layout_height="70dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /></LinearLayout>
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;}@Overridepublic 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<AppInfo> data;private MyAdapter adapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 加载视图--只有一个listviewsetContentView(R.layout.activity_main);// 获取idlv_main_apps = (ListView) findViewById(R.id.lv_main_apps);// 得到数据data = getAllAppInfos();// 创建adapteradapter = new MyAdapter(this, data, R.layout.item_app);// 设置adapter显示lv_main_apps.setAdapter(adapter);// 设置每项(item)的点击监听lv_main_apps.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic 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<AppInfo> getAllAppInfos() {List<AppInfo> list = new ArrayList<AppInfo>();// 得到应用的packgeManagerPackageManager packageManager = getPackageManager();// 创建一个主界面的intentIntent intent = new Intent();intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);// 得到包含应用信息的列表List<ResolveInfo> 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);// 添加到listlist.add(appInfo);}return list;}/** * 继承自CommonBaseAdapter的adapter类 */class MyAdapter extends CommonBaseAdapter<AppInfo> {public MyAdapter(Context context, final List<AppInfo> data, int layoutId) {super(context, data, layoutId, new Convert() {@Overridepublic 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<T> extends BaseAdapter {private Context context;private List<T> data;private int layoutId;public Convert convert;/** * 设置视图数据的抽象方法, 由具体的adapter子类来实现 */public interface Convert{void convert(ViewHolder holder, int position);}public CommonBaseAdapter(Context context, List<T> data, int layoutId,Convert convert) {this.context = context;this.data = data;this.layoutId = layoutId;this.convert = convert;}@Overridepublic int getCount() {return data.size();}@Overridepublic T getItem(int position) {return data.get(position);}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//得到Viewholder对象ViewHolder holder = ViewHolder.getHolder(context, convertView,layoutId);//调用未实现的抽象方法设置数据convert.convert(holder, position);//返回holder中的convertViewreturn 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<Integer,Object>的容器, 效率比map高private SparseArray<View> 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<View>();}/** * 得到当前对应的convertView */public View getConvertView() {return itemConvertView;}/************************* * %%%%%%%%%%%%******************************** 根据视图id得到对应的视图对象 */public <T extends View> 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;}}
0 0
- 通用的adapter
- 通用的Adapter
- 通用Adapter的尝试
- 打造通用的Adapter
- ListView(二)通用的Adapter
- 通用的RecyclerView Adapter适配器
- 打造 RecyclerView的 通用Adapter
- 实现RecyclerView 的通用Adapter
- 通用的recyclerview adapter 适配
- 通用于ListView的Adapter
- 通用Adapter
- 通用adapter
- 通用Adapter
- RecyclerView通用适配器Adapter,对Adapter的封装
- 打造通用的RecyclerView的Adapter
- 打造通用的recycleview的adapter
- android 写一个 通用的Adapter
- 打造AbsListView、RecyclerView的通用Adapter
- node.js概述
- leetcode_Evaluate Reverse Polish Notation
- C#高级编程七十六天----使用指针实现基于栈的高性能数组
- 神经网络:caffe特征可视化的代码样例
- 有的时候用yum 在线安装linux软件包的时候 ,会提示找不到镜像的地址
- 通用的Adapter
- Java之正则表达式【使用语法】
- Android系统中设置TextView的行间距
- C/C++ 语言中 sprintf() 函数的用法
- memcached源码分析之线程池机制(二)
- 在poll的admin文件下添加,date_hierarchy = 'pub_date'字段会报错
- Android Studio配置Github
- WEB网站测试
- 2015 多校联赛 ——HDU5353(构造)