添加字母的多条目排序Adapter

package com.ycjr.navpad_zx.ui.adapter;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.ycjr.navpad_zx.R;
import com.ycjr.navpad_zx.bean.Contact;
import com.ycjr.navpad_zx.db.UserDB;
import com.ycjr.navpad_zx.ui.activity.MsgActivity;
import com.ycjr.navpad_zx.util.ContactComparator;
import com.ycjr.navpad_zx.util.DpUtil;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class ContactAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private LayoutInflater mLayoutInflater;
    private Context mContext;
    private ArrayList<UserDB.BDUser> mContactNames; // 联系人名称字符串数组
    private List<String> mContactList; // 联系人名称List(转换成拼音)
    private List<Contact> resultList; // 最终结果(包含分组的字母)
    private List<String> characterList; // 字母List

    public enum ITEM_TYPE {
        ITEM_TYPE_CHARACTER,
        ITEM_TYPE_CONTACT
    }

    public ContactAdapter(Context context, ArrayList<UserDB.BDUser> contactNames) {
        mContext = context;
        mLayoutInflater = LayoutInflater.from(context);
        mContactNames = contactNames;
        handleContact();
    }
    public void setUserBDList(ArrayList<UserDB.BDUser> contactNames){
        mContactNames.clear();
        mContactNames.addAll(contactNames);
        handleContact();
        notifyDataSetChanged();
    }

    private void handleContact() {
        mContactList = new ArrayList<>();
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < mContactNames.size(); i++) {
            String pinyin = DpUtil.getPingYin(mContactNames.get(i).getAlias());
            map.put(pinyin, mContactNames.get(i).getAlias());
            mContactList.add(pinyin);
        }
        Collections.sort(mContactList, new ContactComparator());
        resultList = new ArrayList<>();
        characterList = new ArrayList<>();

        for (int i = 0; i < mContactList.size(); i++) {
            String name = mContactList.get(i);
            String character = (name.charAt(0) + "").toUpperCase(Locale.ENGLISH);
            if (!characterList.contains(character)) {
                if (character.hashCode() >= "A".hashCode() && character.hashCode() <= "Z".hashCode()) { // 是字母
                    characterList.add(character);
                    resultList.add(new Contact(character, ITEM_TYPE.ITEM_TYPE_CHARACTER.ordinal()));
                } else {
                    if (!characterList.contains("#")) {
                        characterList.add("#");
                        resultList.add(new Contact("#", ITEM_TYPE.ITEM_TYPE_CHARACTER.ordinal()));
                    }
                }
            }

            resultList.add(new Contact(map.get(name), ITEM_TYPE.ITEM_TYPE_CONTACT.ordinal()));
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == ITEM_TYPE.ITEM_TYPE_CHARACTER.ordinal()) {
            Log.i("******ITEM_TYPE=",""+viewType);
            return new CharacterHolder(mLayoutInflater.inflate(R.layout.item_character, parent, false));

        } else {
            Log.i("******ITEM_TYPE2=",""+viewType);
            return new ContactHolder(mLayoutInflater.inflate(R.layout.item_contact, parent, false));

        }
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof CharacterHolder) {
            Log.i("******CharacterHolder=",""+position);
            ((CharacterHolder) holder).mTextView.setText(resultList.get(position).getmName());
        } else if (holder instanceof ContactHolder) {
            Log.i("******ContactHolder=",""+position);
            ((ContactHolder) holder).mTextView.setText(resultList.get(position).getmName());
        }
    }

    @Override
    public int getItemViewType(int position) {
        return resultList.get(position).getmType();
    }

    @Override
    public int getItemCount() {
        Log.i("******getItemCount=",""+resultList.size());
        return resultList == null ? 0 : resultList.size();
    }

    public class CharacterHolder extends RecyclerView.ViewHolder {
        TextView mTextView;

        CharacterHolder(View view) {
            super(view);

            mTextView = (TextView) view.findViewById(R.id.character);
        }
    }

    public class ContactHolder extends RecyclerView.ViewHolder {
        TextView mTextView;

        ContactHolder(final View view) {
            super(view);

            mTextView = (TextView) view.findViewById(R.id.contact_name);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    UserDB.BDUser user = UserDB.DB.getUser(mTextView.getText().toString());
                    Intent intent = new Intent(view.getContext(), MsgActivity.class);
                    intent.putExtra(MsgActivity.USER_ID, user.getId());
                    view.getContext().startActivity(intent);
                }
            });
        }
    }

    public int getScrollPosition(String character) {
        if (characterList.contains(character)) {
            for (int i = 0; i < resultList.size(); i++) {
                if (resultList.get(i).getmName().equals(character)) {
                    return i;
                }
            }
        }

        return -1; // -1不会滑动
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值