要实现一个像通讯录一样的listview
public class MyDistributor2Activity extends BaseActivity {
@InjectView(R.id.my_distributor_lv)
PinnedHeaderNoScrollListViewTest distributor_lv;
LayoutInflater layoutInflater;
MyDistributor2 MyDistributor2;
DistributorPinnedHeaderAdapter distributorAdapter;
RequestQueue queue;
MyDistributor2 distributor;
// unsorted list items
ArrayList<MyDistributor2> mItems = new ArrayList<MyDistributor2>();
// array list to store section positions
ArrayList<Integer> mListSectionPos;
// array list to store listView data
ArrayList<MyDistributor2> mListItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sec_my_distributor_list2);
ButterKnife.inject(this);
// Array to ArrayList
mListSectionPos = new ArrayList<Integer>();
mListItems = new ArrayList<MyDistributor2>();
queue = VolleyQuery.getQueue(this);
layoutInflater = LayoutInflater.from(this);
getDate("first");
findDistributor();
}
//===查询得到到的数据,删除了部分代码
public void getDate(final String method) {
url = ConfigStr.api_base + "myself/myDistributor";
StringUTF8Request request = new StringUTF8Request(
Request.Method.POST,
url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
dialog.dismiss();
byte[] bytes = Base64.decode(response, Base64.DEFAULT);
String result = new String(bytes);
Log.d("result_add", result);
try {
JSONObject jsonObject = new JSONObject(result);
String json = jsonObject.getString("RS100065");
Gson gson = new Gson();
mItems = gson.fromJson(json, new TypeToken<List<MyDistributor2>>() {
}.getType());
new Poplulate().execute(mItems);
} catch (Exception e) {
/
}
}
},
queue.add(request);
}
private void setAdapter(ArrayList<MyDistributor2> myDistributor2) {
distributorAdapter = new DistributorPinnedHeaderAdapter(MyDistributor2Activity.this, myDistributor2, mListSectionPos);
distributor_lv.setAdapter(distributorAdapter);
}
// sort array and extract sections in background Thread here we use
// AsyncTask
private class Poplulate extends AsyncTask<ArrayList<MyDistributor2>, ArrayList<MyDistributor2>, ArrayList<MyDistributor2>> {
private void showLoading(View contentView) {
contentView.setVisibility(View.GONE);
}
private void showContent(View contentView) {
contentView.setVisibility(View.VISIBLE);
}
private void showEmptyText(View contentView) {
contentView.setVisibility(View.GONE);
}
@Override
protected void onPreExecute() {
showLoading(distributor_lv);
super.onPreExecute();
}
@Override
protected ArrayList<MyDistributor2> doInBackground(ArrayList<MyDistributor2>... params) {
return cacalation(params[0]);
}
@Override
protected void onPostExecute(ArrayList<MyDistributor2> result) {
if (!isCancelled()) {
if (result.size() <= 0) {
showEmptyText(distributor_lv);
} else {
showContent(distributor_lv);
}
setAdapter(result);
}
super.onPostExecute(result);
}
}
public class SortIgnoreCase implements Comparator<MyDistributor2> {
public int compare(MyDistributor2 s1, MyDistributor2 s2) {
return s1.getInvite_code().compareToIgnoreCase(s2.getInvite_code());
}
}
}
public class DistributorPinnedHeaderAdapter extends BaseAdapter implements /*OnScrollListener,*/ IPinnedHeader, Filterable {
private static final int TYPE_ITEM = 0;
private static final int TYPE_SECTION = 1;
private static final int TYPE_MAX_COUNT = TYPE_SECTION + 1;
private static String mem_letter;
private Filter filter;
Context mContext;
LayoutInflater mLayoutInflater;
int mCurrentSectionPosition = 0, mNextSectionPostion = 0;
// array list to store section positions
ArrayList<Integer> mListSectionPos;
ArrayList<MyDistributor2> mListItems;
BottomPopUp bottomPopUp2;
public DistributorPinnedHeaderAdapter(Context context, ArrayList<MyDistributor2> listItems, ArrayList<Integer> listSectionPos) {
this.mContext = context;
this.mListItems = listItems;
this.mListSectionPos = listSectionPos;
mLayoutInflater = LayoutInflater.from(mContext);
}
@Override
public int getCount() {
return mListItems.size();
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return !mListSectionPos.contains(position);
}
@Override
public int getViewTypeCount() {
return TYPE_MAX_COUNT;
}
@Override
public int getItemViewType(int position) {
return mListSectionPos.contains(position) ? TYPE_SECTION : TYPE_ITEM;
}
@Override
public Object getItem(int position) {
return mListItems.get(position);
}
@Override
public long getItemId(int position) {
return mListItems.get(position).hashCode();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
int type = getItemViewType(position);
switch (type) {
case TYPE_ITEM://内容部分
convertView = mLayoutInflater.inflate(R.layout.sec_my_distributor_list_item, null);
holder.text_name = (TextView) convertView.findViewById(R.id.my_distributor_item_text_name);
holder.text_tel = (TextView) convertView.findViewById(R.id.my_distributor_item_text_tel);
holder.text_mshopname = (TextView) convertView.findViewById(R.id.my_distributor_item_text_mshopname);
break;
case TYPE_SECTION://头部分类部分
convertView = mLayoutInflater.inflate(R.layout.section_row_view, null);
break;
}
convertView.setTag(holder);
} else {
if(convertView.getTag() instanceof ViewHolder){
holder = (ViewHolder) convertView.getTag();
}else{
holder=new ViewHolder();
int type = getItemViewType(position);
switch (type) {
case TYPE_ITEM:
convertView = mLayoutInflater.inflate(R.layout.sec_my_distributor_list_item, null);
holder.text_name = (TextView) convertView.findViewById(R.id.my_distributor_item_text_name);
holder.text_tel = (TextView) convertView.findViewById(R.id.my_distributor_item_text_tel);
holder.text_mshopname = (TextView) convertView.findViewById(R.id.my_distributor_item_text_mshopname);
break;
case TYPE_SECTION:
convertView = mLayoutInflater.inflate(R.layout.section_row_view, null);
break;
}
}
}
//===设置列表内容各项值
MyDistributor2 distributor = mListItems.get(position);//此处无法获得数据,下面的控件无法绑定数据?
holder.text_name.setText(distributor.getStaff_real_name());
holder.text_tel.setText(distributor.getStaff_partner_phonenum());
holder.text_mshopname.setText(distributor.getStaff_departments_name());
return convertView;
}
@Override
public int getPinnedHeaderState(int position) {
if (getCount() == 0 || position < 0 || mListSectionPos.indexOf(position) != -1) {
return PINNED_HEADER_GONE;
}
mNextSectionPostion = getNextSectionPosition(mCurrentSectionPosition);
if (mNextSectionPostion != -1 && position == mNextSectionPostion - 1) {
return PINNED_HEADER_PUSHED_UP;
}
return PINNED_HEADER_VISIBLE;
}
public int getNextSectionPosition(int currentSectionPosition) {
int index = mListSectionPos.indexOf(currentSectionPosition);
if ((index + 1) < mListSectionPos.size()) {
return mListSectionPos.get(index + 1);
}
return mListSectionPos.get(index);
}
public static class ViewHolder {
public TextView textView;
public TextView sub_textView;
TextView text_name;
TextView text_tel;
TextView text_mshopname;
}
}