package com.letv.watchball.adapter; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import com.letv.cache.LetvCacheMannager; import com.letv.cache.view.LetvImageView; import com.letv.http.bean.LetvDataHull; import com.letv.http.parse.LetvGsonParser; import com.letv.watchball.LetvApplication; import com.letv.watchball.R; import com.letv.watchball.activity.MainActivity; import com.letv.watchball.async.LetvHttpAsyncTask; import com.letv.watchball.bean.Base; import com.letv.watchball.bean.FocusTeamList; import com.letv.watchball.bean.FocusTeamList.Body.Team; import com.letv.watchball.http.api.LetvHttpApi; import com.letv.watchball.utils.LetvUtil; import com.letv.watchball.utils.UIs; public class MyFocusAdapter extends BaseExpandableListAdapter { private FocusTeamList.Body[] mFocusTeamList; private ArrayList<Integer> focusedRecord = new ArrayList<Integer>();//初始关注状态记录 private ArrayList<Integer> unFocusedRecord = new ArrayList<Integer>();//关注状态修改记录 // private ArrayList<ArrayList<Team>> childItemList = new ArrayList<ArrayList<Team>>(); public MyFocusAdapter(FocusTeamList.Body[] mFocusTeamList) { this.mFocusTeamList = mFocusTeamList; // this.childItemList = childItemList; } @Override public int getGroupCount() { return mFocusTeamList.length; } @Override public FocusTeamList.Body getGroup(int groupPosition) { return mFocusTeamList[groupPosition]; } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public int getChildrenCount(int groupPosition) { if(null != mFocusTeamList[groupPosition].teams){ return mFocusTeamList[groupPosition].teams.length; } return 0; } @Override public Team getChild(int groupPosition, int childPosition) { return mFocusTeamList[groupPosition].teams[childPosition]; } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public boolean hasStableIds() { return true; } @Override public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { ParentViewHolder mViewHolder = new ParentViewHolder(); if (null == convertView) { convertView = LayoutInflater.from(MainActivity.getInstance()).inflate(R.layout.layout_myfocus_item_parent, null); mViewHolder.name = (TextView) convertView.findViewById(R.id.parent_name); mViewHolder.icon = (LetvImageView) convertView.findViewById(R.id.parent_icon); mViewHolder.groupIndicator = (ImageView) convertView.findViewById(R.id.parent_indicator); mViewHolder.focus_all = (ImageView) convertView.findViewById(R.id.focus_all); convertView.setTag(mViewHolder); } else { mViewHolder = (ParentViewHolder) convertView.getTag(); } if (isExpanded) { mViewHolder.groupIndicator.setImageResource(R.drawable.myfocus_item_parent_close); } else { mViewHolder.groupIndicator.setImageResource(R.drawable.myfocus_item_parent_open); } final FocusTeamList.Body groupData = getGroup(groupPosition); if(null == groupData) return null; int focus = "1".equals(groupData.focused)?1:0; if (focus == 1) { mViewHolder.focus_all.setImageResource(R.drawable.myfocus_item_child_add_sel); } else { //未关注 mViewHolder.focus_all.setImageResource(R.drawable.myfocus_item_child_add_nor); } if (focus == 1) { // 已关注 // setFocus(true, mViewHolder.focus_all); mViewHolder.focus_all.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(LetvUtil.hasNet()) { new RequestFocusMatch(MainActivity.getInstance(), groupData.type, groupData.level, false, new Runnable() { @Override public void run() { // 取消关注成功 groupData.focused = 0 + ""; for (int i = 0; i < getChildrenCount(groupPosition); i++) { Team team = getChild(groupPosition, i); team.focused = 0+""; } // setFocus(false, focusBtn); focusedRecord.add(groupPosition*1000); notifyDataSetChanged(); } }).start(); }else { UIs.showToast(R.string.toast_net_15); } } }); } else { // 未关注 mViewHolder.focus_all.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(LetvUtil.hasNet()) { new RequestFocusMatch(MainActivity.getInstance(), groupData.type, groupData.level, true, new Runnable() { @Override public void run() { // 关注成功 groupData.focused = 1 + ""; for (int i = 0; i < getChildrenCount(groupPosition); i++) { Team team = getChild(groupPosition, i); team.focused = 1 +""; } // setFocus(false, focusBtn); focusedRecord.add(groupPosition*1000); notifyDataSetChanged(); } }).start(); }else { UIs.showToast(R.string.toast_net_15); } } }); } mViewHolder.name.setText(groupData.name); LetvCacheMannager.getInstance().loadImage(groupData.img_url, mViewHolder.icon); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder mViewHolder = new ChildViewHolder(); if (null == convertView) { convertView = LayoutInflater.from(MainActivity.getInstance()).inflate(R.layout.my_teams_item, null); mViewHolder.name = (TextView) convertView.findViewById(R.id.child_name); mViewHolder.icon = (LetvImageView) convertView.findViewById(R.id.child_icon); mViewHolder.focusSwitcher = (ImageView) convertView.findViewById(R.id.focus_switcher); convertView.setTag(mViewHolder); } else { mViewHolder = (ChildViewHolder) convertView.getTag(); } final Team team = getChild(groupPosition, childPosition); if(null == team) return null; mViewHolder.name.setText(team.team); mViewHolder.icon.setImageResource(R.drawable.ic_default); LetvCacheMannager.getInstance().loadImage(team.img_url, mViewHolder.icon); final FocusTeamList.Body groupData = getGroup(groupPosition); int focus = "1".equals(team.focused)?1:0; if (focus == 1) { mViewHolder.focusSwitcher.setImageResource(R.drawable.myfocus_item_child_add_sel); } else { mViewHolder.focusSwitcher.setImageResource(R.drawable.myfocus_item_child_add_nor); } if (focus == 1) { // 已关注 // setFocus(true, mViewHolder.focusSwitcher); mViewHolder.focusSwitcher.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(LetvUtil.hasNet()) { new RequestUnfocus(MainActivity.getInstance(), team.id, getGroup(groupPosition).level, new Runnable() { @Override public void run() { // 取消关注成功 team.focused = 0 + ""; boolean childAllFocused = isChildAllFocused(groupData); if (childAllFocused){ groupData.focused = 1 + ""; } else { groupData.focused = 0 + ""; } // setFocus(false, focusBtn); focusedRecord.add(groupPosition*1000+childPosition+1); notifyDataSetChanged(); } }).start(); }else { UIs.showToast(R.string.toast_net_15); } } }); } else { // 未关注 // setFocus(false, mViewHolder.focusSwitcher); mViewHolder.focusSwitcher.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if(LetvUtil.hasNet()) { new RequestFocus(MainActivity.getInstance(), team.id, getGroup(groupPosition).level, new Runnable() { @Override public void run() { // 关注成功 team.focused = 1 + ""; boolean childAllFocused = isChildAllFocused(groupData); if (childAllFocused){ groupData.focused = 1 + ""; } else { groupData.focused = 0 + ""; } // setFocus(true, focusBtn); unFocusedRecord.add(groupPosition*1000+childPosition+1); notifyDataSetChanged(); } }).start(); }else { UIs.showToast(R.string.toast_net_15); } } }); } return convertView; } /** * 关注状态是否改变 * @return */ public boolean hasFocusStateChanged() { if (focusedRecord.size() > 0 && (focusedRecord.size() == unFocusedRecord.size())) { Comparator<Integer> comparator = new Comparator<Integer>() { @Override public int compare(Integer lhs, Integer rhs) { return lhs - rhs; } }; Collections.sort(focusedRecord, comparator); Collections.sort(unFocusedRecord, comparator); for (int i = 0; i < unFocusedRecord.size(); i++) { if (!(focusedRecord.get(i) == (unFocusedRecord.get(i)))) { return true; } } return false; } return true; } private boolean isChildAllFocused(FocusTeamList.Body group){ boolean focused = false; Team[] teams = group.teams; for (int i = 0 ; i < teams.length ; i++ ){ focused = teams[i].focused.equals("1"); if (focused){ focused = true; continue; } else { focused = false; break; } } return focused; } // /** // * 设置关注状态 // * // * @param isFocus // * @param tv // */ // public void setFocus(boolean isFocus, ImageView tv) { // if (isFocus) { // //关注 // tv.setImageResource(R.drawable.myfocus_item_child_add_sel); // } else { // //未关注 // tv.setImageResource(R.drawable.myfocus_item_child_add_nor); // } // } private class ParentViewHolder { private TextView name; public LetvImageView icon; public ImageView groupIndicator; public ImageView focus_all; } private class ChildViewHolder { public TextView name; public LetvImageView icon; public ImageView focusSwitcher; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } /** * http请求 关注/取消关注赛事所有球队 * */ private class RequestFocusMatch extends LetvHttpAsyncTask<Base> { private String matchId; private String level; private boolean focus; private Runnable callback; public RequestFocusMatch(Context context, String matchId, String level, boolean focus,Runnable callback) { super(context, true); this.matchId = matchId; this.level = level; this.focus = focus; this.callback = callback; } @Override public LetvDataHull<Base> doInBackground() { return LetvHttpApi.requestFocusMatch(0, matchId, level, focus?"1":"0", new LetvGsonParser<Base>(0,Base.class)); // return LetvHttpApi.requestFocus(teamId, level, new LetvGsonParser<FocusTeamList>(0, FocusTeamList.class)); } @Override public void onPostExecute(int updateId, Base result) { if (Integer.parseInt(result.header.status) == 1) { callback.run(); showToast(focus, true); } else { showToast(focus, false); } } @Override public void netNull() { showToast(focus, false); } @Override public void netErr(int updateId, String errMsg) { showToast(focus, false); } @Override public void dataNull(int updateId, String errMsg) { showToast(focus, false); } private void showToast(boolean focus,boolean success){ String toastMsg = (focus?"关注":"取消关注")+(success?"成功":"失败"); Toast.makeText(LetvApplication.getInstance(), toastMsg , Toast.LENGTH_SHORT).show(); } } /** * http请求 关注 * */ private class RequestFocus extends LetvHttpAsyncTask<Base> { private String teamId; private String level; private Runnable callback; public RequestFocus(Context context, String teamId, String level, Runnable callback) { super(context, true); this.teamId = teamId; this.level = level; this.callback = callback; } @Override public LetvDataHull<Base> doInBackground() { return LetvHttpApi.requestFocus(teamId, level, new LetvGsonParser<Base>(0, Base.class)); } @Override public void onPostExecute(int updateId, Base result) { if (Integer.parseInt(result.header.status) == 1) { callback.run(); Toast.makeText(LetvApplication.getInstance(), "关注成功!", Toast.LENGTH_SHORT).show(); } else { if(!LetvUtil.hasNet()) { Toast.makeText(LetvApplication.getInstance(), "关注失败!", Toast.LENGTH_SHORT).show(); } } } @Override public void netNull() { if(!LetvUtil.hasNet()) { Toast.makeText(LetvApplication.getInstance(), "关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("netNull"); } @Override public void netErr(int updateId, String errMsg) { if(!LetvUtil.hasNet()) { Toast.makeText(LetvApplication.getInstance(), "关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("netErr()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } @Override public void dataNull(int updateId, String errMsg) { if(!LetvUtil.hasNet()) { Toast.makeText(LetvApplication.getInstance(), "关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("dataNull()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } } /** * http请求 取消关注 * */ private class RequestUnfocus extends LetvHttpAsyncTask<Base> { private String teamId; private String level; private Runnable callback; public RequestUnfocus(Context context, String teamId, String level, Runnable callback) { super(context, true); this.teamId = teamId; this.level = level; this.callback = callback; } @Override public LetvDataHull<Base> doInBackground() { return LetvHttpApi.requestUnfocus(teamId, level, new LetvGsonParser<Base>(0, Base.class)); } @Override public void onPostExecute(int updateId, Base result) { if (Integer.parseInt(result.header.status) == 1) { callback.run(); Toast.makeText(LetvApplication.getInstance(), "取消关注成功!", Toast.LENGTH_SHORT).show(); } else { if(!LetvUtil.CheckNetworkState()){ Toast.makeText(LetvApplication.getInstance(), "取消关注失败!", Toast.LENGTH_SHORT).show(); } } } @Override public void netNull() { if(!LetvUtil.CheckNetworkState()){ Toast.makeText(LetvApplication.getInstance(), "取消关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("netNull"); } @Override public void netErr(int updateId, String errMsg) { if(!LetvUtil.CheckNetworkState()){ Toast.makeText(LetvApplication.getInstance(), "取消关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("netErr()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } @Override public void dataNull(int updateId, String errMsg) { if(!LetvUtil.CheckNetworkState()){ Toast.makeText(LetvApplication.getInstance(), "取消关注失败!", Toast.LENGTH_SHORT).show(); } System.err.println("dataNull()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } } }