package net.oschina.gitapp.adapter; import java.util.List; import net.oschina.gitapp.R; import net.oschina.gitapp.bean.Notification; import net.oschina.gitapp.bean.ProjectNotification; import net.oschina.gitapp.bean.URLs; import net.oschina.gitapp.bean.User; import net.oschina.gitapp.common.BitmapManager; import net.oschina.gitapp.common.StringUtils; import net.oschina.gitapp.common.UIHelper; import android.content.Context; import android.graphics.BitmapFactory; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.View.OnClickListener; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; /** * 通知列表适配器 * @created 2014-07-07 * @author 火蚁(http://my.oschina.net/LittleDY) * * 最后更新:2014-07-08 * 更新者:火蚁 * * @reason 改用分类的适配器 */ public class NotificationListAdapter extends BaseExpandableListAdapter { private Context mContext; private List<List<Notification>> mData; private List<ProjectNotification> mGroups; private LayoutInflater mInflater; private BitmapManager bmpManager; private class GroupViewHolder{ public ImageView mGroupFace; public TextView mGroupUserName; public TextView mGroupName; public TextView mGroupCount; } private class ChildViewHolder { public ImageView face; public TextView user_name; public TextView title; public TextView date;//日期 } public NotificationListAdapter(Context context, List<List<Notification>> data, List<ProjectNotification> mGroups) { this.mContext = context; this.mData = data; this.mInflater = LayoutInflater.from(mContext); this.mGroups = mGroups; this.bmpManager = new BitmapManager(BitmapFactory.decodeResource( context.getResources(), R.drawable.widget_dface_loading)); } @Override public int getGroupCount() { return mData.size(); } @Override public int getChildrenCount(int groupPosition) { return mData.get(groupPosition).size(); } @Override public List<Notification> getGroup(int groupPosition) { return mData.get(groupPosition); } @Override public Notification getChild(int groupPosition, int childPosition) { return getGroup(groupPosition).get(childPosition); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return false; } // 返回分组的view @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder holder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.notification_group_item, null); holder = new GroupViewHolder(); holder.mGroupFace = (ImageView) convertView.findViewById(R.id.group_face); holder.mGroupUserName = (TextView) convertView.findViewById(R.id.group_username); holder.mGroupCount = (TextView) convertView.findViewById(R.id.group_count); holder.mGroupName = (TextView) convertView.findViewById(R.id.group_name); convertView.setTag(holder); } else { holder = (GroupViewHolder) convertView.getTag(); } ProjectNotification pn = mGroups.get(groupPosition); // 加载头像 String portrait = pn.getOwner().getPortrait() == null ? "" : pn.getOwner().getPortrait(); if (portrait.endsWith("portrait.gif") || StringUtils.isEmpty(portrait)) { holder.mGroupFace.setImageResource(R.drawable.mini_avatar); } else { String portraitURL = URLs.GITIMG + pn.getOwner().getPortrait(); bmpManager.loadBitmap(portraitURL, holder.mGroupFace); } // String portraitURL = pn.getOwner().getNew_portrait(); // if (portraitURL.endsWith("portrait.gif")) { // holder.mGroupFace.setImageResource(R.drawable.mini_avatar); // } else { // bmpManager.loadBitmap(portraitURL, holder.mGroupFace); // } holder.mGroupUserName.setText(pn.getOwner().getName()); holder.mGroupName.setText(pn.getName()); holder.mGroupCount.setText(mData.get(groupPosition).size() + ""); // 更换状态图标 ImageView parentImageViw=(ImageView) convertView.findViewById(R.id.group_arrow); //判断isExpanded就可以控制是按下还是关闭,同时更换图片 if (isExpanded) { parentImageViw.setBackgroundResource(R.drawable.notice_group_arrow_down); } else { parentImageViw.setBackgroundResource(R.drawable.notice_group_arrow_up); } return convertView; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder holder = null; if (convertView == null) { convertView = mInflater.inflate(R.layout.notification_listitem, null); holder = new ChildViewHolder(); holder.face = (ImageView) convertView.findViewById(R.id.notification_listitem_userface); holder.user_name = (TextView) convertView.findViewById(R.id.notification_listitem_name); holder.title = (TextView) convertView.findViewById(R.id.notification_listitem_title); holder.date = (TextView) convertView.findViewById(R.id.notification_listitem_date); convertView.setTag(holder); } else { holder = (ChildViewHolder) convertView.getTag(); } final Notification notification = getChild(groupPosition, childPosition); // 1.加载头像 String portrait = notification.getUserinfo().getPortrait() == null ? "" : notification.getUserinfo().getPortrait(); if (portrait.endsWith("portrait.gif") || StringUtils.isEmpty(portrait)) { holder.face.setImageResource(R.drawable.widget_dface); } else { String portraitURL = URLs.GITIMG + notification.getUserinfo().getPortrait(); bmpManager.loadBitmap(portraitURL, holder.face); } // String portraitURL = notification.getUserinfo().getNew_portrait(); // if (portraitURL.endsWith("portrait.gif")) { // holder.face.setImageResource(R.drawable.mini_avatar); // } else { // bmpManager.loadBitmap(portraitURL, holder.face); // } holder.face.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { User user = notification.getUserinfo(); if (user == null) { return; } UIHelper.showUserInfoDetail(mContext, user, null); } }); holder.user_name.setText(notification.getUserinfo().getName()); holder.title.setText(notification.getTitle()); holder.date.setText(StringUtils.friendly_time(notification.getCreated_at())); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }