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不会滑动
}
}
添加字母的多条目排序Adapter
最新推荐文章于 2021-06-03 14:13:29 发布