package com.letv.watchball.fragment; import java.util.ArrayList; import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.content.res.TypedArray; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ExpandableListView; import android.widget.ExpandableListView.OnChildClickListener; import android.widget.ExpandableListView.OnGroupClickListener; 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.WelcomeActivity; import com.letv.watchball.adapter.LeftFragmentAdapter; import com.letv.watchball.async.LetvHttpAsyncTask; import com.letv.watchball.bean.LocalCacheBean; import com.letv.watchball.bean.MatchList; import com.letv.watchball.bean.MatchList.Body.Match; import com.letv.watchball.bean.MatchList.Body.OriginalColumn; import com.letv.watchball.http.api.LetvHttpApi; import com.letv.watchball.manager.LeftFragmentLsn; import com.letv.watchball.utils.LetvCacheDataHandler; @SuppressLint("ValidFragment") public class SlidingMenuFragmentLeft extends Fragment { /** * tag parent */ private String[] tagParent; private ArrayList<LeftFragmentItem> itemsTop = new ArrayList<LeftFragmentItem>();// 顶部item private LeftFragmentLsn callback; private ExpandableListView mListView; private LeftFragmentAdapter adapter; public SlidingMenuFragmentLeft() { } public SlidingMenuFragmentLeft(LeftFragmentLsn callback) { this.callback = callback; } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View root = LayoutInflater.from(getActivity()).inflate( R.layout.fragment_left, null, false); mListView = (ExpandableListView) root.findViewById(R.id.listView1); return root; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); String[] tagTop = getResources().getStringArray(R.array.watchball_top); TypedArray tagTopIcon = getResources().obtainTypedArray( R.array.watchball_top_icon); tagParent = getResources().getStringArray(R.array.watchball_tags); adapter = new LeftFragmentAdapter(getActivity()); // add tag top for (int i = 0; i < tagTop.length; i++) { LeftFragmentItem topItem = new LeftFragmentItem(tagTop[i], tagTopIcon.getResourceId(i, -1)); itemsTop.add(topItem); } adapter.groupItemList.add(tagParent[0]); adapter.childItemList.add(itemsTop); mListView.setAdapter(adapter); // mListView.setGroupIndicator(null); // mListView.setCacheColorHint(Color.TRANSPARENT); // mListView.setDivider(getResources().getDrawable(R.drawable.left_item_line_repeate)); notifyDateChanged(); reloadMatchList(); } public void reloadMatchList() { /** * 如果之前有加载的赛事列表,直接返回 */ if (adapter.groupItemList.size() > 1) { return; } new RequestMatchList(getActivity()).start(); } public void notifyDateChanged() { adapter.notifyDataSetChanged(); // 展开所有parent for (int i = 0; i < adapter.groupItemList.size(); i++) { mListView.expandGroup(i); } // 设置parent不可点击 mListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { return true; } }); mListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { LeftFragmentItem item = adapter.getChild(groupPosition, childPosition); LetvApplication.getInstance().setShowVideoList(true); switch (groupPosition) { case 0: // 直播 if (childPosition == 0) { callback.invoke(LeftFragmentLsn.ACTION_LIVE, null); } else if (childPosition == 1) { // 我的球队 callback.invoke(LeftFragmentLsn.ACTION_MY_TEAM, null); } break; case 1: // 赛事 if (null != item) { if (item.type.equals("310")) { callback.invoke(LeftFragmentLsn.ACTION_LIVE, "0"); } else { callback.invoke(LeftFragmentLsn.ACTION_EVENTS, item.match); } } break; case 2: // 原创节目 if (null != item) { callback.invoke(LeftFragmentLsn.ACTION_ORIGINAL, item.originalColumn); } break; } adapter.onItemClick(groupPosition, childPosition); adapter.notifyDataSetChanged(); return true; } }); } /** * http请求赛事列表 * */ private class RequestMatchList extends LetvHttpAsyncTask<MatchList> { public RequestMatchList(Context context) { super(context, true); } @Override public MatchList loadLocalData() { try { LocalCacheBean bean = LetvCacheDataHandler.readMatchListData(); MatchList result = new LetvGsonParser<MatchList>(0, MatchList.class).initialParse(bean.getCacheData()); return result; } catch (Exception e) { } return null; } @Override public boolean loadLocalDataComplete(MatchList t) { if (null != t) { onPostExecute(0, t); return true; } return false; } @Override public LetvDataHull<MatchList> doInBackground() { LetvDataHull<MatchList> dataHull = LetvHttpApi.requestMatchlist( true, new LetvGsonParser<MatchList>(0, MatchList.class)); if (dataHull.getDataType() == LetvDataHull.DataType.DATA_IS_INTEGRITY) { LetvCacheDataHandler .saveMatchListData(dataHull.getSourceData()); } return dataHull; // return LetvHttpApi.requestMatchlist(true, new // LetvGsonParser<MatchList>(0, MatchList.class)); } @Override public void onPostExecute(int updateId, MatchList result) { // 先clear之前的数据(缓存) while (adapter.groupItemList.size() > 1) { adapter.groupItemList.remove(1); adapter.childItemList.remove(1); } // 添加网络加载的 赛事列表 Match[] matchs = result.body.match_list; ArrayList<LeftFragmentItem> itemsMatch = new ArrayList<LeftFragmentItem>(); for (int i = 0; i < matchs.length; i++) { LeftFragmentItem sampleItem = new LeftFragmentItem( matchs[i].name, matchs[i].img_url, matchs[i].type); sampleItem.match = matchs[i]; itemsMatch.add(sampleItem); } adapter.groupItemList.add(tagParent[1]); adapter.childItemList.add(itemsMatch); // 添加网络加载的 原创节目列表 OriginalColumn[] originals = result.body.original_columns; ArrayList<LeftFragmentItem> itemsOriginal = new ArrayList<LeftFragmentItem>(); for (int i = 0; i < originals.length; i++) { LeftFragmentItem sampleItem = new LeftFragmentItem( originals[i].name, originals[i].img_url, originals[i].id + ""); sampleItem.originalColumn = originals[i]; itemsOriginal.add(sampleItem); } adapter.groupItemList.add(tagParent[2]); adapter.childItemList.add(itemsOriginal); notifyDateChanged(); } @Override public void netNull() { System.err.println("netNull"); } @Override public void netErr(int updateId, String errMsg) { System.err.println("netErr()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } @Override public void dataNull(int updateId, String errMsg) { System.err.println("dataNull()->" + "updateId:" + updateId + " ,errMsg:" + errMsg); } } public class LeftFragmentItem { public String childTitle;// 赛事或原创节目 name public int imgRes;// 赛事或原创节目 图片res(初始化) public String imgUrl;// 赛事或原创节目 图片url(网络) public String type;// 赛事或原创节目 id public Match match;// 赛事info public OriginalColumn originalColumn;// 原创info public LeftFragmentItem(String name, int imgRes) { this.childTitle = name; this.imgRes = imgRes; } public LeftFragmentItem(String name, String imgUrl, String type) { this.childTitle = name; this.imgUrl = imgUrl; this.type = type; } } @Override public void onDestroyView() { super.onDestroyView(); /** * frament 销毁时,移除此fragment */ Fragment fragment = getFragmentManager().findFragmentById( R.id.fragment_left); FragmentTransaction ft = getActivity().getSupportFragmentManager() .beginTransaction(); if (null != fragment && !ft.isEmpty()) { ft.remove(fragment).commitAllowingStateLoss(); } } }