package com.hupu.games.activity;
import java.util.LinkedList;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.hupu.games.HuPuApp;
import com.hupu.games.R;
import com.hupu.games.adapter.TeamsListAdapter;
import com.hupu.games.common.HuPuRes;
import com.hupu.games.common.SharedPreferencesMgr;
import com.hupu.games.data.FollowResultEntity;
import com.hupu.games.data.LeaguesEntity;
import com.hupu.games.data.TeamsEntity;
import com.hupu.games.db.HuPuDBAdapter;
import com.koushikdutta.urlimageviewhelper.UrlImageViewHelper;
public class FollowTeamActivity extends HupuBaseActivity {
private ExpandableListView expandableListView;
private ExpandableAdapter viewAdapter;
private ListView mLvTeams;
private TeamsListAdapter mAdapterTeams;
boolean bFromSetup;
public static LinkedList<LeaguesEntity> leaguesEntities;
private int pos = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_follow_team);
init();
}
private void init() {
leaguesEntities = new LinkedList<LeaguesEntity>();
HuPuDBAdapter mDBAdapter = new HuPuDBAdapter(this);
for (LeaguesEntity league : mDBAdapter.getAllLeagues()) {
if (league.template.equals("nba") || league.template.equals("cba")
|| league.template.equals("soccerleagues")
|| league.template.equals("soccercupleagues")) {
leaguesEntities.add(league);
}
}
// leaguesEntities = mDBAdapter.getFollowLeagu();
for (int i = 0; i < leaguesEntities.size(); i++) {
leaguesEntities.get(i).mList = mDBAdapter
.getTeamsByLid(leaguesEntities.get(i).lid);
}
expandableListView = (ExpandableListView) findViewById(R.id.list_team);
viewAdapter = new ExpandableAdapter(LayoutInflater.from(this),
leaguesEntities);
expandableListView.setAdapter(viewAdapter);
expandableListView.setOnChildClickListener(childClickListener);
expandableListView.setOnGroupClickListener(onGroupClickListener);
expandableListView.setGroupIndicator(null);
setOnClickListener(R.id.btn_setup);
}
int expandFlag = -1;
private OnGroupClickListener onGroupClickListener = new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView listView, View v,
int groupPosition, long id) {
if (expandFlag == -1) {
// 展开被选的group
listView.expandGroup(groupPosition);
// 设置被选中的group置于顶端
listView.setSelectedGroup(groupPosition);
expandFlag = groupPosition;
} else if (expandFlag == groupPosition) {
listView.collapseGroup(expandFlag);
expandFlag = -1;
} else {
listView.collapseGroup(expandFlag);
// 展开被选的group
listView.expandGroup(groupPosition);
// 设置被选中的group置于顶端
listView.setSelectedGroup(groupPosition);
expandFlag = groupPosition;
}
return true;
}
};
private OnChildClickListener childClickListener = new OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View view,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
if (leaguesEntities.get(groupPosition).mList.get(childPosition).is_follow == 1) {
((com.hupu.games.activity.FollowTeamActivity.ExpandableAdapter.Child) view
.getTag()).chooseBox
.setBackgroundResource(R.drawable.btn_menu_choose_up);
leaguesEntities.get(groupPosition).mList.get(childPosition).is_follow = 0;
} else {
((com.hupu.games.activity.FollowTeamActivity.ExpandableAdapter.Child) view
.getTag()).chooseBox
.setBackgroundResource(R.drawable.choose_btn_down);
leaguesEntities.get(groupPosition).mList.get(childPosition).is_follow = 1;
}
int leagueIndex = 0, teamIndex = 0;
for (LeaguesEntity league : leaguesEntities) {
teamIndex = 0;
for (TeamsEntity team : league.mList) {
if
(team.name.equals(leaguesEntities.get(groupPosition).mList.get(childPosition).name)
&&
league.game_type.equals(leaguesEntities.get(groupPosition).game_type))
{
// if (team.name
// .equals(leaguesEntities.get(groupPosition).mList
// .get(childPosition).name)) {
leaguesEntities.get(leagueIndex).mList.get(teamIndex).is_follow = leaguesEntities
.get(groupPosition).mList.get(childPosition).is_follow;
}
teamIndex++;
}
leagueIndex++;
}
viewAdapter.notifyDataSetChanged();
return false;
}
};
@Override
public void onReqResponse(Object o, int methodId) {
// TODO Auto-generated method stub
super.onReqResponse(o, methodId);
if (methodId == HuPuRes.REQ_METHOD_FOLLOW_ALL_TEAM) {
FollowResultEntity result = (FollowResultEntity) o;
if (result.result != 1) {
SharedPreferencesMgr.setBoolean("follow_result", false);
}
}
if (methodId == HuPuRes.REQ_METHOD_FOLLOW_LEAGUE) {
FollowResultEntity result = (FollowResultEntity) o;
if (result.result != 1) {
SharedPreferencesMgr.setBoolean("follow_result", false);
}
}
}
public void Setup() {
// 插入数据
mApp.updateTeams(leaguesEntities);
// 拉取 带顺序的数据
// leaguesEntities = mApp.loadLeagues();
mApp.followOnlyTeams(leaguesEntities);
finish();
}
@Override
public void treatClickEvent(int id) {
switch (id) {
case R.id.btn_setup:
// end();
Setup();
break;
}
super.treatClickEvent(id);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_DOWN) {
// end();
Setup();
}
return false;
}
private void end() {
mApp.followTeams(mAdapterTeams.getSelectList(), this);
Intent in = new Intent();
in.putExtra("follow",
HuPuApp.getFollowTeamsNames(mAdapterTeams.getSelectList()));
setResult(RESULT_OK, in);
finish();
}
@Override
public void treatItemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
mAdapterTeams.clickItem(pos);
}
private final int DIALOG_NOTIFY = 1136;
@Override
public void clickNegativeButton(int dialogId) {
super.clickNegativeButton(dialogId);
if (dialogId == DIALOG_NOTIFY) {
if (mDialog != null)
mDialog.cancel();
}
}
@Override
public void clickPositiveButton(int dialogId) {
super.clickPositiveButton(dialogId);
if (dialogId == DIALOG_NOTIFY) {
// 打开通知
if (mDialog != null)
mDialog.cancel();
mApp.setNotify(true);
mAdapterTeams.clickItem();
}
}
class ExpandableAdapter extends BaseExpandableListAdapter {
// private Context context;
LinkedList<LeaguesEntity> leagueListEntities;
LayoutInflater layoutInflater;
/*
* 构造函数: 参数1:context对象 参数2:一级列表数据源 参数3:二级列表数据源
*/
public ExpandableAdapter(LayoutInflater layoutInflater,
LinkedList<LeaguesEntity> groups) {
this.leagueListEntities = groups;
this.layoutInflater = layoutInflater;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
if (leagueListEntities.get(groupPosition).mList == null) {
return "";
} else {
return leagueListEntities.get(groupPosition).mList
.get(childPosition).name;
}
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
// 获取二级列表的View对象
@Override
public View getChildView(final int groupPosition,
final int childPosition, boolean isLastChild, View convertView,
ViewGroup parent) {
@SuppressWarnings("unchecked")
String text = (String) getChild(groupPosition, childPosition);
// LayoutInflater layoutInflater = (LayoutInflater)
// context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// 获取二级列表对应的布局文件, 并将其各元素设置相应的属性
Child child;
if (convertView == null) {
convertView = (RelativeLayout) layoutInflater.inflate(
R.layout.choose_teams_child, null);
child = new Child();
child.teamLogo = (ImageView) convertView
.findViewById(R.id.team_logo);
child.teamName = (TextView) convertView
.findViewById(R.id.team_name);
child.chooseBox = (ImageView) convertView
.findViewById(R.id.child_checkbox);
convertView.setTag(child);
} else {
child = (Child) convertView.getTag();
}
child.teamName.setText(text);
UrlImageViewHelper.setUrlDrawable(child.teamLogo,
leagueListEntities.get(groupPosition).mList
.get(childPosition).logo, R.drawable.bg_home_nologo);
if (leaguesEntities.get(groupPosition).mList.get(childPosition).is_follow == 1) {
child.chooseBox
.setBackgroundResource(R.drawable.btn_menu_choose_down);
} else {
child.chooseBox.setBackgroundResource(R.drawable.btn_menu_choose_up);
}
return convertView;
}
@Override
public int getChildrenCount(int groupPosition) {
if (leagueListEntities.get(groupPosition).mList == null) {
return 0;
} else {
return leagueListEntities.get(groupPosition).mList.size();
}
}
@Override
public Object getGroup(int groupPosition) {
return leagueListEntities.get(groupPosition).name;
}
@Override
public int getGroupCount() {
return leagueListEntities.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
// 获取一级列表View对象
@Override
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
String text = leagueListEntities.get(groupPosition).name;
Group group;
if (convertView == null) {
convertView = (RelativeLayout) layoutInflater.inflate(
R.layout.choose_teams_group, null);
group = new Group();
group.leagueLogo = ((ImageView) convertView
.findViewById(R.id.leagu_logo));
group.leagueName = (TextView) convertView
.findViewById(R.id.league_name);
group.chooseNum = (TextView) convertView
.findViewById(R.id.follow_team_num);
group.groupDown = ((ImageView) convertView
.findViewById(R.id.group_img));
convertView.setTag(group);
} else {
group = (Group) convertView.getTag();
}
group.leagueName.setText(text);
UrlImageViewHelper.setUrlDrawable(group.leagueLogo,
leagueListEntities.get(groupPosition).logo, R.drawable.bg_home_nologo);
int followNum = 0;
for (TeamsEntity team : leagueListEntities.get(groupPosition).mList) {
followNum = team.is_follow == 1 ? followNum + 1 : followNum;
}
if (followNum > 0) {
group.chooseNum.setText("已关注 " + followNum + " 支");
} else {
group.chooseNum.setText("");
}
followNum = 0;
if (isExpanded) {
group.groupDown.setImageResource(R.drawable.group_up);
} else {
group.groupDown.setImageResource(R.drawable.group_down);
}
return convertView;
}
@Override
public boolean hasStableIds() {
return true;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
// Log.d("isChildSelectable",
// "groupPosition="+groupPosition+" ;childPosition="+childPosition);
return true;
}
private class Group {
TextView leagueName;
ImageView leagueLogo;
TextView chooseNum;
ImageView groupDown;
}
private class Child {
TextView teamName;
ImageView teamLogo;
ImageView chooseBox;
}
}
}