package com.suan.weclient.adapter; import java.util.ArrayList; import android.app.Activity; import android.app.Dialog; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.Color; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import com.suan.weclient.R; import com.suan.weclient.activity.ChatActivity; import com.suan.weclient.activity.FansProfileActivity; import com.suan.weclient.util.ListCacheManager; import com.suan.weclient.util.Util; import com.suan.weclient.util.data.DataManager; import com.suan.weclient.util.data.bean.FansBean; import com.suan.weclient.util.data.bean.UserBean; import com.suan.weclient.util.net.WeChatLoader; import com.suan.weclient.util.net.WechatManager; import com.suan.weclient.util.net.WechatManager.OnActionFinishListener; import com.suan.weclient.util.net.images.ImageCacheManager; public class FansListAdapter extends BaseAdapter implements OnScrollListener { private LayoutInflater mInflater; private ListCacheManager mListCacheManager; private DataManager mDataManager; Activity mActivity; /* about dialog */ private EditText popContentEditText; private TextView popTitleTextView; private TextView textAmountTextView; private Button popCancelButton, popSureButton; private ListView popListView; private Dialog dialog; /* * whether the scroll is busy */ private boolean mBusy = false; /* * whether the user cancel the last editRemark if so ,we will save it */ public FansListAdapter(Activity mActivity, DataManager dataManager) { this.mInflater = LayoutInflater.from(mActivity); this.mDataManager = dataManager; this.mActivity = mActivity; this.mListCacheManager = new ListCacheManager(); } private ArrayList<FansBean> getFansItems() { if (mDataManager.getUserGroup().size() == 0) { ArrayList<FansBean> blankArrayList = new ArrayList<FansBean>(); return blankArrayList; } return mDataManager.getFansHolders() .get(mDataManager.getCurrentPosition()).getFansBeans(); } @Override public int getCount() { // TODO Auto-generated method stub return getFansItems().size(); } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return arg0; } public void updateCache() { mListCacheManager.clearData(); } public View newView(final int position) { View convertView = null; switch (getFansItems().get(position).getBeanType()) { case FansBean.BEAN_TYPE_USER: convertView = mInflater.inflate(R.layout.fans_item_user_layout, null); break; case FansBean.BEAN_TYPE_DATA: convertView = mInflater.inflate(R.layout.fans_item_data_layout, null); break; } return convertView; } private ItemViewHolder getHolder(final View view, int position) { ItemViewHolder holder = (ItemViewHolder) view.getTag(); if (holder == null) { holder = new ItemViewHolder(view, position); view.setTag(holder); } return holder; } public class ItemViewHolder { private View parentLayout; private TextView profileTextView; private TextView nickNameTextView; private ImageView profileImageView; private LinearLayout groupLayout; private TextView groupTextView; private ImageButton remarkButton; /* about data */ private TextView totalPeopleTextView; private TextView newPeopleTextView; private FansBean fansBean; public FansBean getFansBean() { return fansBean; } public ItemViewHolder(View parentView, int postion) { fansBean = getFansItems().get(postion); this.parentLayout = parentView; switch (fansBean.getBeanType()) { case FansBean.BEAN_TYPE_DATA: newPeopleTextView = (TextView) parentView.findViewById(R.id.fans_data_text_new); totalPeopleTextView = (TextView) parentView.findViewById(R.id.fans_data_text_total); break; case FansBean.BEAN_TYPE_USER: profileImageView = (ImageView) parentView .findViewById(R.id.fans_item_img_profile); profileTextView = (TextView) parentView .findViewById(R.id.fans_item_text_profile); nickNameTextView = (TextView) parentView.findViewById(R.id.fans_item_text_nickname); groupLayout = (LinearLayout) parentView.findViewById(R.id.fans_item_layout_group); groupTextView = (TextView) parentView.findViewById(R.id.fans_item_text_group ); remarkButton = (ImageButton) parentView .findViewById(R.id.fans_item_button_edit_remark); break; } } } public void bindView(View view, final int position) { ItemViewHolder holder = getHolder(view, position); switch (holder.getFansBean().getBeanType()) { case FansBean.BEAN_TYPE_DATA: if (mDataManager.getCurrentUser() != null) { UserBean currentUser = mDataManager.getCurrentUser(); int newPeopleCount = 0; try { newPeopleCount = Integer.parseInt(currentUser.getNewPeople()); } catch (Exception e) { } if (newPeopleCount == 0) { holder.newPeopleTextView.setVisibility(View.INVISIBLE); } else { holder.newPeopleTextView.setVisibility(View.VISIBLE); holder.newPeopleTextView.setText(mActivity.getResources().getString(R.string.new_fans).replace("...", newPeopleCount + "")); } holder.totalPeopleTextView.setText(": " + currentUser.getTotalPeople()); } break; case FansBean.BEAN_TYPE_USER: holder.parentLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub /* take care fansId and fakeId fansId is used in fans list fakeId is used in message list */ mDataManager.setFansProfileFakeId(getFansItems().get(position).getFansId()); Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, FansProfileActivity.class); mActivity.startActivity(jumbIntent); mActivity.overridePendingTransition(R.anim.activity_movein_from_right_anim, R.anim.activity_moveout_to_left_anim); } }); if (holder.getFansBean().getRemarkName().length() != 0) { holder.profileTextView.setText(holder.getFansBean().getRemarkName()); String nickNameString = Util.getShortString(holder.getFansBean().getNickname(), 13, 3); holder.nickNameTextView.setText(nickNameString); } else { holder.profileTextView.setText(holder.getFansBean().getNickname()); } holder.remarkButton.setOnClickListener(new ClickListener(holder)); setGroupSpinner(holder); setProfileImage(holder); break; } } public class ClickListener implements OnClickListener { private ItemViewHolder holder; public ClickListener(ItemViewHolder holder) { this.holder = holder; } @Override public void onClick(View v) { popEditRemark(holder); } } public void popEditRemark(final ItemViewHolder holder) { LayoutInflater inflater = (LayoutInflater) mActivity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View dialogView = inflater.inflate(R.layout.dialog_edit_layout, null); popTitleTextView = (TextView) dialogView .findViewById(R.id.dialog_edit_text_title); popContentEditText = (EditText) dialogView .findViewById(R.id.dialog_edit_edit_text); popSureButton = (Button) dialogView .findViewById(R.id.dialog_edit_button_sure); popCancelButton = (Button) dialogView .findViewById(R.id.dialog_edit_button_cancel); textAmountTextView = (TextView) dialogView .findViewById(R.id.dialog_edit_text_num); textAmountTextView.setText("0 x"); textAmountTextView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub popContentEditText.setText(""); } }); popContentEditText.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub textAmountTextView.setTextColor(Color.rgb(0, 0, 0)); textAmountTextView.setText(s.length() + " x"); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); popTitleTextView.setText("修改备注名:" + holder.getFansBean().getNickname()); popSureButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String editContent = popContentEditText.getText().toString(); if (editContent.length() == 0) { Toast.makeText(mActivity, "备注名不能为空", Toast.LENGTH_SHORT).show(); } else { editRemark(editContent, holder); } } }); popCancelButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub dialog.cancel(); } }); dialog = new Dialog(mActivity, R.style.dialog); dialog.setContentView(dialogView); dialog.show(); } private void editRemark(final String replyContent, final ItemViewHolder holder) { if (replyContent.length() == 0) { Toast.makeText(mActivity, "请输入内容", Toast.LENGTH_LONG).show(); return; } dialog.dismiss(); mDataManager.getWechatManager().modifyContacts(mDataManager.getCurrentPosition(), WeChatLoader.MODIFY_CONTACTS_ACTION_REMARK, holder.getFansBean().getFansId(), "", replyContent, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { holder.getFansBean().setRemarkName(replyContent); if (holder != null) { holder.profileTextView.setText(replyContent + "(" + holder.getFansBean().getNickname() + ")"); } } }); } private void setGroupSpinner(final ItemViewHolder holder) { String groupName = ""; groupName = getGroupNameData().get(getItemGroupIndex(holder)); holder.groupTextView.setText(groupName); holder.groupLayout.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { popGroupList(holder); } }); } public void popGroupList(final ItemViewHolder holder) { LayoutInflater inflater = (LayoutInflater) mActivity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View dialogView = inflater.inflate(R.layout.dialog_list_layout, null); popTitleTextView = (TextView) dialogView .findViewById(R.id.dialog_list_text_title); popListView = (ListView) dialogView.findViewById(R.id.dialog_list_list_content); ArrayAdapter adapter = new ArrayAdapter<String>( mActivity, R.layout.dialog_list_item, R.id.dialog_list_item_text, getGroupNameData()); popListView.setAdapter(adapter); popListView.setOnItemClickListener(new ItemClickListener(holder)); popTitleTextView.setText("Group:"); dialog = new Dialog(mActivity, R.style.dialog); dialog.setContentView(dialogView); dialog.show(); } public class ItemClickListener implements AdapterView.OnItemClickListener { private ItemViewHolder holder; public ItemClickListener(ItemViewHolder holder) { this.holder = holder; } @Override public void onItemClick(AdapterView<?> parent, View view, final int index, long id) { dialog.dismiss(); mDataManager.getWechatManager().modifyContacts(mDataManager.getCurrentPosition(), WeChatLoader.MODIFY_CONTACTS_ACTION_MODIFY, holder.getFansBean().getFansId(), getGroupIdArray()[index] + "", "", new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { holder.getFansBean().setGroupId(getGroupIdArray()[index]); holder.groupTextView.setText(getGroupNameData().get(index)); } }); } } private ArrayList<String> getGroupNameData() { ArrayList<String> result = new ArrayList<String>(); for (int i = 0; i < mDataManager.getCurrentFansHolder().getFansGroupBeans().size(); i++) { String nowGroupNameString = mDataManager.getCurrentFansHolder() .getFansGroupBeans().get(i).getGroupName(); result.add(nowGroupNameString); } return result; } private int getItemGroupIndex(ItemViewHolder holder) { int itemGroupId = holder.getFansBean().getGoupId(); for (int i = 0; i < mDataManager.getCurrentFansHolder() .getFansGroupBeans().size(); i++) { int nowGroupId = mDataManager.getCurrentFansHolder() .getFansGroupBeans().get(i).getGroupId(); if (itemGroupId == nowGroupId) { return i; } } return 0; } private int[] getGroupIdArray() { int groupSize = mDataManager.getCurrentFansHolder().getFansGroupBeans() .size(); int[] groupStrings = new int[groupSize]; for (int i = 0; i < groupSize; i++) { groupStrings[i] = mDataManager.getCurrentFansHolder() .getFansGroupBeans().get(i).getGroupId(); } return groupStrings; } private void setProfileImage(final ItemViewHolder holder) { holder.profileImageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDataManager.createChat(mDataManager.getCurrentUser(), holder.getFansBean().getFansId(), holder.getFansBean().getNickname()); Intent jumbIntent = new Intent(); jumbIntent.setClass(mActivity, ChatActivity.class); mActivity.startActivity(jumbIntent); } }); boolean imgLoaded = false; if (holder.profileImageView.getTag() != null) { imgLoaded = true; } if (!mBusy && !imgLoaded) { Bitmap contentBitmap = mDataManager.getCacheManager() .getBitmap( ImageCacheManager.CACHE_MESSAGE_LIST_PROFILE + holder.getFansBean().getFansId()); if (contentBitmap != null) { holder.profileImageView.setImageBitmap(contentBitmap); } else { mDataManager.getWechatManager().getMessageHeadImg( mDataManager.getCurrentPosition(), holder.getFansBean().getFansId(), holder.getFansBean().getReferer(), holder.profileImageView, new OnActionFinishListener() { @Override public void onFinish(int code, Object object) { // TODO Auto-generated method stub if (code == WechatManager.ACTION_SUCCESS) { if (object != null) { Bitmap roundBitmap = Util.roundCornerWithBorder((Bitmap) object, holder.profileImageView.getWidth(), 10, Color.parseColor("#c6c6c6")); mDataManager.getCacheManager().putBitmap( ImageCacheManager.CACHE_MESSAGE_LIST_PROFILE + holder.getFansBean() .getFansId(), roundBitmap, true); holder.profileImageView.setImageBitmap(roundBitmap); holder.profileImageView.setTag(roundBitmap); } } } }); } } } private String getFansId(int position) { return getFansItems().get(position).getFansId(); } @Override public View getView(final int position, View convertView, ViewGroup parent) { View v; if (!mListCacheManager.containView(getFansId(position))) { v = newView(position); mListCacheManager.putView(v, getFansId(position)); } else { v = mListCacheManager.getView(getFansId(position)); } bindView(v, position); return v; } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { // TODO Auto-generated method stub if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { // 滑动停止 mBusy = false; } else if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {// 滑动手未松开 mBusy = true; } else if (scrollState == OnScrollListener.SCROLL_STATE_FLING) {// 滑动中手已松开 mBusy = true; } } }