package com.wisedu.scc.love.activity.fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import com.wisedu.scc.love.R;
import com.wisedu.scc.love.widget.sortlist.CharacterParser;
import com.wisedu.scc.love.widget.sortlist.PersonDto;
import com.wisedu.scc.love.widget.sortlist.PinyinComparator;
import com.wisedu.scc.love.widget.sortlist.SideBar;
import com.wisedu.scc.love.widget.sortlist.SortListAdapter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ContactTabFragment extends Fragment
implements SideBar.OnTouchingLetterChangedListener, TextWatcher {
public ContactTabFragment() {
}
/**
* 页面内控件
*/
private View layout;
private SideBar mSideBar;
private TextView mDialog;
private ListView mListView;
private EditText mSearchInput;
private CharacterParser characterParser;// 汉字转拼音
private PinyinComparator pinyinComparator;// 根据拼音来排列ListView里面的数据类
private List<PersonDto> sortDataList = new ArrayList<>();
private SortListAdapter mAdapter;
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
layout = inflater.inflate(R.layout.fragment_contact, container, false);
mListView = (ListView)layout.findViewById(R.id.contact_member);
mSideBar = (SideBar)layout.findViewById(R.id.contact_sidebar);
mDialog = (TextView)layout.findViewById(R.id.contact_dialog);
mSearchInput = (EditText)layout.findViewById(R.id.contact_search_input);
mSideBar.setTextView(mDialog);
mSideBar.setOnTouchingLetterChangedListener(this);
initData();
return layout;
}
/**
* 初始化数据
*/
private void initData() {
// 实例化汉字转拼音类
characterParser = CharacterParser.getInstance();
pinyinComparator = new PinyinComparator();
PersonDto cuser0 = new PersonDto();
cuser0.setName("添加新朋友");
cuser0.setSortLetters("#");
PersonDto cuser1 = new PersonDto();
cuser1.setName("阿东");
cuser1.setSortLetters("a");
PersonDto cuser2 = new PersonDto();
cuser2.setName("贝贝");
cuser2.setSortLetters("b");
PersonDto cuser3 = new PersonDto();
cuser3.setName("西西");
cuser3.setSortLetters("x");
PersonDto cuser4 = new PersonDto();
cuser4.setName("楠楠");
cuser4.setSortLetters("n");
PersonDto cuser5 = new PersonDto();
cuser5.setName("君君");
cuser5.setSortLetters("j");
PersonDto cuser6 = new PersonDto();
cuser6.setName("陈诚");
cuser6.setSortLetters("c");
PersonDto cuser7 = new PersonDto();
cuser7.setName("美美");
cuser7.setSortLetters("m");
PersonDto cuser8 = new PersonDto();
cuser8.setName("花园");
cuser8.setSortLetters("h");
PersonDto cuser9 = new PersonDto();
cuser9.setName("天天");
cuser9.setSortLetters("t");
PersonDto cuser10 = new PersonDto();
cuser10.setName("八戒");
cuser10.setSortLetters("b");
sortDataList.add(cuser0);
sortDataList.add(cuser1);
sortDataList.add(cuser2);
sortDataList.add(cuser3);
sortDataList.add(cuser4);
sortDataList.add(cuser5);
sortDataList.add(cuser6);
sortDataList.add(cuser7);
sortDataList.add(cuser8);
sortDataList.add(cuser9);
sortDataList.add(cuser10);
fillData(sortDataList);
// 根据a-z进行排序源数据
Collections.sort(sortDataList, pinyinComparator);
mAdapter = new SortListAdapter(ContactTabFragment.this.getActivity(), sortDataList);
mListView.setAdapter(mAdapter);
mSearchInput.addTextChangedListener(this);
}
@Override
public void onTouchingLetterChanged(String s) {
int position = 0;
// 该字母首次出现的位置
if(mAdapter != null){
position = mAdapter.getPositionForSection(s.charAt(0));
}
if (position != -1) {
mListView.setSelection(position);
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 当输入框里面的值为空,更新为原来的列表,否则为过滤数据列表
filterData(s.toString(), sortDataList);
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
/**
* 根据输入框中的值来过滤数据并更新ListView
*
* @param filterStr
*/
private void filterData(String filterStr, List<PersonDto> list) {
List<PersonDto> filterDateList = new ArrayList<>();
if (TextUtils.isEmpty(filterStr)) {
filterDateList = list;
} else {
filterDateList.clear();
for (PersonDto sortModel : list) {
String name = sortModel.getName();
String suoxie = sortModel.getSuoxie();
if (name.indexOf(filterStr.toString()) != -1 ||
suoxie.indexOf(filterStr.toString()) != -1 ||
characterParser.getSelling(name).startsWith(filterStr.toString())) {
filterDateList.add(sortModel);
}
}
}
// 根据a-z进行排序
Collections.sort(filterDateList, pinyinComparator);
mAdapter.updateListView(filterDateList);
}
/**
* 填充数据
*
* @param list
*/
private void fillData(List<PersonDto> list) {
for (PersonDto cUserInfoDto : list) {
if (cUserInfoDto != null && cUserInfoDto.getName() != null) {
String pinyin = characterParser.getSelling(cUserInfoDto.getName());
String suoxie = CharacterParser.getFirstSpell(cUserInfoDto.getName());
cUserInfoDto.setSuoxie(suoxie);
String sortString = pinyin.substring(0, 1).toUpperCase();
if ("1".equals(cUserInfoDto.getUtype())) {// 判断是否是管理员
cUserInfoDto.setSortLetters("☆");
} else if (sortString.matches("[A-Z]")) {// 正则表达式,判断首字母是否是英文字母
cUserInfoDto.setSortLetters(sortString);
} else {
cUserInfoDto.setSortLetters("#");
}
}
}
}
}