打造一个简单的万能适配器

来源:互联网 发布:成都新蜀肿瘤医院知乎 编辑:程序博客网 时间: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
原创粉丝点击