package com.hupu.games.fragment;
import java.util.ArrayList;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import com.hupu.games.R;
import com.hupu.games.activity.BasketballActivity;
import com.hupu.games.adapter.BasketBallGamesListAdapter;
import com.hupu.games.common.HuPuRes;
import com.hupu.games.common.HupuLog;
import com.hupu.games.data.BaseGameEntity;
import com.hupu.games.data.game.basketball.BasketBallGamesBlock;
import com.hupu.games.data.game.basketball.BasketballGameEntity;
import com.hupu.games.data.game.basketball.BasketballGamesResp;
/** 篮球赛程页面碎片 */
public class BasketballGamesFragment extends BaseGameFragment {
private BasketBallGamesListAdapter mListAdapter;
private ArrayList<BasketBallGamesBlock> mBlockList;
public final long TEN_MINS = 120000;
/** 最后刷新的时间 */
public long mLastNewsTime;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTag = getArguments().getString("tag");
}
@Override
public void setAdapter() {
if (mListAdapter == null) {
Click click = new Click();
if (mTag.equals("cba"))
mListAdapter = new BasketBallGamesListAdapter(mAct, click, 1);
else
mListAdapter = new BasketBallGamesListAdapter(mAct, click, 0);
// mPullListener = new PullListener();
} else {
if (mToday != null) {
mProgressBar.setVisibility(View.GONE);
int index = mDateList.indexOf(mToday);
if (index > -1) { // 如果是比赛日,开始socket连接
if (mTag.equals("cba"))
mAct.joinRoom(HuPuRes.ROOM_CBA_HOME);
else
mAct.joinRoom(HuPuRes.ROOM_NBA_HOME);
}
}
}
listview.setOnItemClickListener(new ListClick());
// if (iPos > 0)
// listview.setSelectionFromTop(iPos, iTop);
}
@Override
public void reqDefaultData() {
if (!runDefaultReq)
req(0, 0, HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_DEFAULT);
HupuLog.e("papa", "nba||cba-reqDefaultData=" + mTag);
}
private boolean runDefaultReq = false;
private void reqDefault() {
if (mProgressBar != null)
mProgressBar.setVisibility(View.VISIBLE);
runDefaultReq = true;
if (mListReqQue != null)
mListReqQue.remove("" + 0);
preDate = 0;
nextDate = 0;
req(0, 0, HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_DEFAULT);
}
public void prev() {
// HupuLog.d("fb","prev");
req(preDate, -1, HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_PRE);
}
public void next() {
// HupuLog.d("fb","next");
req(nextDate, 1, HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_NEXT);
}
/** 计算和合并数据 */
private void calData(int methodId, BasketballGamesResp entity) {
if (mDateList == null) {
mDateList = new ArrayList<String>();
mBlockList = new ArrayList<BasketBallGamesBlock>();
}
if (mToday == null) {
mToday = "" + entity.current;
mMinDate = entity.min;
mMaxDate = entity.max;
}
if (methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_DEFAULT
|| methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_NEXT) {
if (entity.mDays != null) {
if (methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_DEFAULT) {
if (mDateList != null)
mDateList.clear();
if (mBlockList != null) {
mBlockList.clear();
}
}
mDateList.addAll(entity.mDays);
mBlockList.addAll(entity.mBlockList);
if (preDate == 0 && entity.firstDay > 0) {
preDate = entity.firstDay - 1;
mListReqQue.remove("" + 0);
} else
mListReqQue.remove("" + nextDate);
if (entity.lastDay + 1 > nextDate)
nextDate = entity.lastDay + 1;
// nextDate = getDate(entity.lastDay,1);
}
} else if (methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_PRE) {
if (entity.mDays != null) {
mDateList.addAll(0, entity.mDays);
mBlockList.addAll(0, entity.mBlockList);
mListReqQue.remove("" + preDate);
if (entity.firstDay - 1 < preDate || preDate == 0)
preDate = getDate(entity.firstDay, -1);
}
}
listview.setPullRefreshEnable(preDate > mMinDate);
listview.setPullLoadEnable(nextDate < mMaxDate);
}
private boolean isOnresume = false;
@Override
public void onResume() {
// TODO Auto-generated method stub
HupuLog.e("papa", "nba||cba-resume=" + mTag);
// 适用于董老师的 除了进直播才不刷新 实时列表 其他情况回到nba和cba 比赛列表都刷新
if (mTag.equals("cba") || mTag.equals("nba")) {
if (isOnresume) {
reqDefault();
} else{
isOnresume = true;
if (listview != null ) {
if (listview.getAdapter() == null) {
//HupuLog.e("papa", "mlistadapter size=="+listview.getAdapter().getCount());
reqDefault();
}
}
}
}
JoinRoom();
super.onResume();
}
@Override
public void onStop() {
// TODO Auto-generated method stub
HupuLog.e("papa-baskeball", "stop--tag==" + mTag);
if (!isLeaveRoom) {
mAct.leaveRoom();
isLeaveRoom = false;
}
super.onStop();
}
public void JoinRoom() {
if (mToday != null) {
int index = mDateList.indexOf(mToday);
if (index > -1) { // 如果是比赛日,开始socket连接
if (mTag.equals("cba"))
mAct.joinRoom(HuPuRes.ROOM_CBA_HOME);
else
mAct.joinRoom(HuPuRes.ROOM_NBA_HOME);
}
}
}
/** 设置数据 */
public void setData(int methodId, BasketballGamesResp resp) {
listview.stopRefresh();
if (resp.mBlockList == null)
return;
calData(methodId, resp);
mAct.checkToken(resp.isLogin);
mListAdapter.setData(mBlockList);
// if(mTag.equals("cba"))
// mAct.joinRoom(HuPuRes.ROOM_CBA_HOME);
if (methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_DEFAULT) {
listview.setAdapter(mListAdapter);
int index = mDateList.indexOf(mToday);
if (index > -1) {
// 如果是比赛日,开始socket连接
if (mTag.equals("cba"))
mAct.joinRoom(HuPuRes.ROOM_CBA_HOME);
else
mAct.joinRoom(HuPuRes.ROOM_NBA_HOME);
if (mBlockList != null) {// 如果还有比赛在进行中,常亮
byte status = resp.mBlockList.get(index).mGames.get(0).byt_status;
if (status == 2)
mAct.setScreenLight(true);
else
mAct.setScreenLight(false);
}
}
// 设置锚点
listview.setSelectionFromTop(resp.anchorIndex, headerHeight);
} else if (methodId == HuPuRes.REQ_METHOD_BASKETBALL_GAMES_BY_PRE) {
int block = resp.mBlockList.size();
int items = resp.total + block + 1;
listview.setSelectionFromTop(items, headerHeight);
}
}
/** 推送过来的数据 */
public void updateData(BasketBallGamesBlock resp) {
if (mBlockList == null && mBlockList.size() == 0)
return;
HupuLog.e("papa", "update=" + mBlockList.size());
int index = mDateList.indexOf(mToday);
if (index > -1) {
BasketBallGamesBlock older = mBlockList.get(index);
if (older != null) {
int oldIndex = 0;
BasketballGameEntity olderEntity = null;
int position = 0;
for (BasketballGameEntity entity : resp.mGames) {
// 实时推送数据会引起比赛的排序顺序变化,所以需要定位上次保存的比赛的位置;
oldIndex = older.mIds.indexOf(entity.i_gId + "");
// 实时推送数据会引起比赛的不包含关注信息,所以需要从上次保存的比赛的数据复制过去;
if (oldIndex > -1) {
olderEntity = older.mGames.get(oldIndex);
olderEntity.update(entity);
if (position != oldIndex) {
// 移动比赛位置
// older.mGames.remove(olderEntity);
older.mIds.remove(oldIndex);
older.mIds.add(position, olderEntity.i_gId + "");
older.mGames.remove(oldIndex);
older.mGames.add(position, olderEntity);
}
}
position++;
}
}
mListAdapter.setData(mBlockList);
}
}
/** 更新比赛关注的状态 */
public void updateFollow(BaseGameEntity entity) {
entity.bFollow = entity.bFollow > 0 ? (byte) 0 : (byte) 1;
mListAdapter.notifyDataSetChanged();
}
public void clearAll() {
if (mListAdapter != null) {
mListAdapter.clear();
}
if (mProgressBar != null) {
mProgressBar.setVisibility(View.VISIBLE);
}
mListReqQue.clear();
mToday = null;
if (mBlockList != null)
mBlockList.clear();
if (mDateList != null)
mDateList.clear();
mBlockList = null;
mDateList = null;
}
public void click(View v) {
int id = v.getId();
switch (id) {
case R.id.img_follow:
BasketballGameEntity entity = (BasketballGameEntity) v.getTag();
mAct.setFollowGame(entity, BasketballGamesFragment.this);
break;
}
}
private boolean isLeaveRoom = false;
@Override
public void itemClick(AdapterView<?> arg0, View v, int pos, long arg3) {
if (pos > -1 && pos < mListAdapter.getCount()) {
BasketballGameEntity data = mListAdapter.getItemAt(pos);
if (data != null) {
isOnresume = false;
mAct.leaveRoom();
isLeaveRoom = true;
if ("nba".equals(mTag))
mAct.switchToLive(data, pos, true,mTag);
else {
Intent in = new Intent(getActivity(),
BasketballActivity.class);
in.putExtra("data", data);
in.putExtra("tag", mTag);
startActivity(in);
}
}
}
}
@Override
public void onSuccess(Object o, int reqType) {
BasketballGamesResp entity = (BasketballGamesResp) o;
setData(reqType, entity);
runDefaultReq = false;
if (mProgressBar != null && mProgressBar.isShown())
mProgressBar.setVisibility(View.GONE);
}
}