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

将优化后的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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值