打造一个简单的万能适配器
来源:互联网 发布:成都新蜀肿瘤医院知乎 编辑:程序博客网 时间:2024/06/08 09:48
将优化后的BaseAdapter封装成一个通用的万能适配器,第一次的封装还不够完善,以后将改进和优化.
package com.xspacing.commonadapter;import java.util.ArrayList;import java.util.List;import com.xspacing.commonadapter.CommonAdapter.OnListenerView;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;import android.widget.Toast;public class MainActivity extends Activity { protected static final String TAG = "MainActivity"; private ListView listView; private Context mContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mContext = this; final List<Student> list = new ArrayList<Student>(); listView = (ListView) findViewById(R.id.main_listview); // 添加假数据 for (int i = 0; i < 20; i++) { Student student = new Student(); if (i % 2 == 0) { student.name = i + ".阳澄湖大闸蟹"; student.desc = "9月23日正式开湖"; student.reId = R.drawable.a25; } else { student.name = i + ".特大新闻"; student.desc = "上海将举行xxx的演唱会"; student.reId = R.drawable.a26; } list.add(student); } CommonAdapter<Student> commonAdapter = new CommonAdapter<Student>(mContext, list, R.layout.item_list_view); // 接口回调,获取position和ViewHolder对象 commonAdapter.setOnListenerView(new OnListenerView() { @Override public void ViewChange(ViewHolder mHolder, int position) { // 设置参数 mHolder.SetText(list.get(position).desc, R.id.main_tv_desc); mHolder.SetText(list.get(position).name, R.id.main_tv_name); mHolder.setImageResource(list.get(position).reId, R.id.main_img); } }); listView.setAdapter(commonAdapter); // 监听每个item listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(), position + "", Toast.LENGTH_SHORT).show(); } }); }}
package com.xspacing.commonadapter;public class Student { public String name; // 标题 public int reId; // 图片ID public String desc;// 描述 public Student(String name, String desc, int reId) { this.name = name; this.desc = desc; this.reId = reId; } public Student() { }}
package com.xspacing.commonadapter;import java.util.List;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;/** * * @ClassName CommonAdapter.java * @Description 定制一个简单的万能适配器 * @author Smile * @version v1.0 * @date 2016年9月21日 上午10:45:17 */public class CommonAdapter<T> extends BaseAdapter { private static final String TAG = "CommonAdapter"; List<T> list; Context mContext; ViewHolder mHolder = null; int layoutId; public CommonAdapter() { } public CommonAdapter(Context mContext, List<T> list, int layoutId) { this.list = list; this.mContext = mContext; this.layoutId = layoutId; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } public interface OnListenerView { void ViewChange(ViewHolder mHolder, int position); } OnListenerView listener; public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(mContext).inflate(layoutId, parent, false); mHolder = new ViewHolder(convertView); convertView.setTag(mHolder); Log.i(TAG, "新生资源"); } else { Log.i(TAG, "复用资源"); mHolder = (ViewHolder) convertView.getTag(); } listener.ViewChange(mHolder, position); return mHolder.getConvertView(); } public void setOnListenerView(OnListenerView listener) { this.listener = listener; }}
package com.xspacing.commonadapter;import android.graphics.Bitmap;import android.graphics.drawable.Drawable;import android.util.SparseArray;import android.view.View;import android.widget.ImageView;import android.widget.TextView;/** * * @ClassName ViewHolder.java * @Description 将布局的控件封装成一个类 * @author Smile * @version v1.0 * @date 2016年9月21日 上午11:06:29 */public class ViewHolder { View mConvertView; SparseArray<View> mViews; // 类似于一个Map<Integer,View> public ViewHolder(View convertView) { this.mConvertView = convertView; mViews = new SparseArray<View>(); } public View getConvertView() { return mConvertView; } public void SetText(String content, int layoutId) { TextView tv = (TextView) getView(layoutId); tv.setText(content); } public void setImageResource(int resId, int layoutId) { ImageView imageView = (ImageView) getView(layoutId); imageView.setImageResource(resId); } public void setImageBitmap(Bitmap bitmap, int layoutId) { ImageView imageView = (ImageView) getView(layoutId); imageView.setImageBitmap(bitmap); } public void setImageDrawable(Drawable drawable, int layoutId) { ImageView imageView = (ImageView) getView(layoutId); imageView.setImageDrawable(drawable); } // 防止重复取id public Object getView(int layoutId) { View view = mViews.get(layoutId); if (view == null) { view = mConvertView.findViewById(layoutId); mViews.put(layoutId, view); } return view; }}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xspacing.commonadapter.MainActivity" > <ListView android:id="@+id/main_listview" android:layout_width="match_parent" android:layout_height="match_parent" > </ListView></RelativeLayout>
<?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="wrap_content" android:layout_margin="10dp" > <ImageView android:id="@+id/main_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <LinearLayout android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/main_tv_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:id="@+id/main_tv_desc" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="2dp" /> </LinearLayout></LinearLayout>
0 0
- 打造一个简单的万能适配器
- 教你打造一个万能的适配器
- 教你打造一个万能的适配器
- 打造RecyclerView的万能适配器
- android打造万能的适配器
- 打造万能的Listview适配器
- 打造万能的android ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- Adapter---打造万能的ListView GridView 适配器
- Adapter---打造万能的ListView GridView 适配器
- android 打造万能的ListView GridView 适配器
- Android 打造万能的ListView GridView 适配器
- 打造万能的ListView GridView 适配器
- Android之打造ListView的万能适配器
- 打造万能的ListView GridView 适配器
- 打造万能的ListView GridView 适配器
- Android-打造万能适配器
- Android 打造万能适配器
- windows注册表小知识
- HTML网页制作基础第四弹
- 剑指offer----整数中1出现的次数(从1到n整数中1出现的次数)
- Spring学习笔记(六) Bean的作用域 & Spel 表达式
- 电脑经验 win7 开启Telnet服务器与Telnet客户端
- 打造一个简单的万能适配器
- ubuntu挂载u盘出现错误:mount:unknown filesystem type 'exfat'
- c++的一些特例,学习的时候需要注意!
- Just Do It
- apache2.4+php7开启curl扩展问题。
- w3m 使用总结
- html5中px,em,rem区别
- 【折腾日记GEN8_5】ESXI主机重装之 虚拟系统的激活
- 今天学了JavaScript的事件,上图,下附代码