Android 万能的Adapter for ListView,GridView等,支持多种Item类型的情况。

点击查看简单介绍

可以直接导入项目参考,在Android Studio中,使用Import Module进行导入,如下图:

万能适配器

单种类型Item

listView.setAdapter(new CommonAdapter<Bean>(getActivity(), mDatas,
                R.layout.item_single_listview)
{
      @Override
      public void convert(final ViewHolder holder, final Bean bean)
      {
          holder.setText(R.id.id_title, bean.getTitle())
                  .setText(R.id.id_desc, bean.getDesc())
                  .setText(R.id.id_time, bean.getTime())
                  .setText(R.id.id_phone, bean.getPhone());

          holder.setOnClickListener(R.id.id_title, new View.OnClickListener()
          {
              @Override
              public void onClick(View view)
              {
                  Toast.makeText(getActivity(), bean.getTitle(), Toast.LENGTH_SHORT).show();
              }
          });
      }

});

只需要简单的将Adapter继承CommonAdapter,复写convert方法即可。省去了自己编写ViewHolder等大量的重复的代码。

  • 可以通过holder.getView(id)拿到任何控件。
  • ViewHolder中封装了大量的常用的方法,比如holder.setText(id,text),holder.setOnClickListener(id,listener)等,可以支持使用。

效果图:

万能适配器

多种类型的Item

package com.zhy.quickdev.adapter.sample.adapter;

import android.content.Context;

import com.zhy.quickdev.adapter.MultiItemCommonAdapter;
import com.zhy.quickdev.adapter.MultiItemTypeSupport;
import com.zhy.quickdev.adapter.R;
import com.zhy.quickdev.adapter.ViewHolder;
import com.zhy.quickdev.adapter.sample.bean.ChatMessage;

import java.util.List;

/**
 * Created by zhy on 15/9/4.
 */
public class ChatAdapter extends MultiItemCommonAdapter<ChatMessage>
{
    public ChatAdapter(Context context, List<ChatMessage> datas)
    {
        super(context, datas, new MultiItemTypeSupport<ChatMessage>()
        {
            @Override
            public int getLayoutId(int position, ChatMessage msg)
            {
                if (msg.isComMeg())
                {
                    return R.layout.main_chat_from_msg;
                }
                return R.layout.main_chat_send_msg;
            }

            @Override
            public int getViewTypeCount()
            {
                return 2;
            }
            @Override
            public int getItemViewType(int postion, ChatMessage msg)
            {
                if (msg.isComMeg())
                {
                    return ChatMessage.RECIEVE_MSG;
                }
                return ChatMessage.SEND_MSG;
            }
        });
    }

    @Override
    public void convert(ViewHolder holder, ChatMessage chatMessage)
    {

        switch (holder.getLayoutId())
        {
            case R.layout.main_chat_from_msg:
                holder.setText(R.id.chat_from_content, chatMessage.getContent());
                holder.setText(R.id.chat_from_name, chatMessage.getName());
                holder.setImageResource(R.id.chat_from_icon, chatMessage.getIcon());
                break;
            case R.layout.main_chat_send_msg:
                holder.setText(R.id.chat_send_content, chatMessage.getContent());
                holder.setText(R.id.chat_send_name, chatMessage.getName());
                holder.setImageResource(R.id.chat_send_icon, chatMessage.getIcon());
                break;
        }
    }
}

需要在构造中传入MultiItemTypeSupport对象,然后在convert方法中,根据holder.getLayoutId(),根据不同的layoutId进行相应的控件初始化即可。

效果图:

万能适配器

 

 

 1 package com.example.adapter;
 2 
 3 import java.util.List;
 4 
 5 import android.content.Context;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.BaseAdapter;
10 
11 public abstract class CommonAdapter<T> extends BaseAdapter {
12     protected Context mContext;
13     protected List<T> mDatas;
14     protected LayoutInflater mInflater;
15     private int layoutId;
16 
17     public CommonAdapter(Context context, List<T> datas, int layoutId) {
18         this.mContext = context;
19         mInflater = LayoutInflater.from(context);
20         this.mDatas = datas;
21         this.layoutId = layoutId;
22     }
23 
24     @Override
25     public int getCount() {
26         return mDatas.size();
27     }
28 
29     @Override
30     public T getItem(int position) {
31         return mDatas.get(position);
32     }
33 
34     @Override
35     public long getItemId(int position) {
36         return position;
37     }
38 
39     @Override
40     public View getView(int position, View convertView, ViewGroup parent) {
41         ViewHolder holder = ViewHolder.get(mContext, convertView, parent,
42                 layoutId, position);
43         convert(holder, getItem(position));
44         return holder.getConvertView();
45     }
46 
47     public abstract void convert(ViewHolder holder, T t);
48 
49 }
CommonAdapter.java

相关文章: