package com.letv.watchball.fragment; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentTransaction; import android.support.v4.app.ListFragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.TextView; import com.letv.http.bean.LetvDataHull; import com.letv.http.parse.LetvGsonParser; import com.letv.watchball.R; import com.letv.watchball.adapter.OriginalVideoAdapter; import com.letv.watchball.async.LetvHttpAsyncTask; import com.letv.watchball.bean.MatchList.Body.OriginalColumn; import com.letv.watchball.bean.OriginalVideo; import com.letv.watchball.bean.OriginalVideo.Body.Video; import com.letv.watchball.http.api.LetvHttpApi; import com.letv.watchball.ui.impl.BasePlayActivity; import com.letv.watchball.utils.LetvUtil; import com.letv.watchball.view.ListFootView; /** * 原创节目视频列表展示控件 * * @author Liuheyuan * */ public class OriginalVideoListFragment extends ListFragment { private ListView mListView; private OriginalVideoAdapter adapter; /** * 当前ListView的起始项 * */ private int _start, _end; /** * 加载的起始位置 * */ private int startPos = 0; private int hopePos = 0; /** * 一次加载的条数 * */ private int num = 30; private ListFootView footerView; private TextView emptyView; // private OriginalVideo originalVideos = new OriginalVideo(); private OriginalColumn originalColumn; public OriginalVideoListFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return super.onCreateView(inflater, container, savedInstanceState); } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // 初始化ListView mListView = getListView(); mListView.setDivider(new ColorDrawable(getResources().getColor( R.color.letv_list_divider))); mListView.setDividerHeight(1); mListView.setCacheColorHint(0); mListView.setFadingEdgeLength(0); // mListView.setSelector(android.R.color.transparent); adapter = new OriginalVideoAdapter(getActivity()); mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == SCROLL_STATE_IDLE) { if (_end < adapter.getOriginalVideos().body.videos.length) { notityListImage(); } } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { _start = firstVisibleItem; _end = firstVisibleItem + visibleItemCount; if (firstVisibleItem == 0) { notityListImage(); } if (firstVisibleItem + visibleItemCount >= adapter .getOriginalVideos().body.total && 0 != adapter.getOriginalVideos().body.total) { notityListImage(); if (mListView.getFooterViewsCount() > 0) { mListView.removeFooterView(footerView); } return; } // System.err.println("startPos:"+startPos+",hopePos:"+hopePos); if (firstVisibleItem + visibleItemCount >= totalItemCount && startPos > hopePos) { // LHY hopePos 和 startPos 相差很大 hopePos += num; requsetData(false); } } }); // 创建footerView footerView = new ListFootView(getActivity()); footerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { requsetData(false); } }); mListView.addFooterView(footerView); // 创建emptyView emptyView = new TextView(getActivity()); emptyView.setText("emptyView"); mListView.setEmptyView(emptyView); setListAdapter(adapter); } @Override public void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); long pid; Video data = adapter.getOriginalVideos().body.videos[position]; // LetvPlayFunction.playVideo(getActivity(), Integer.parseInt(data.vid), // null, null, false, 0); if (data.pid != null) { pid = Long.parseLong(data.pid); } else { pid = 0; } BasePlayActivity.launch(getActivity(), pid, Long.parseLong(data.vid)); } @Override public void setListAdapter(ListAdapter adapter) { super.setListAdapter(adapter); } public void setOriginalColumn(OriginalColumn originalColumn) { if (null != this.originalColumn && originalColumn.id == this.originalColumn.id) { return; } this.originalColumn = originalColumn; if (mListView.getFooterViewsCount() > 0) { mListView.removeFooterView(footerView); } mListView.addFooterView(footerView); setListAdapter(adapter); requsetData(true); } private void notityListImage() { if (adapter != null) { adapter.notifyImageView(_start, _end); } } private RequestVrsVideosList requestVrsVideosListThread; public void requsetData(boolean isNew) { if (null != requestVrsVideosListThread) { requestVrsVideosListThread.cancel(true); } requestVrsVideosListThread = new RequestVrsVideosList(getActivity(), isNew); requestVrsVideosListThread.start(); } private void refrashListView() { adapter.notifyDataSetChanged(); notityListImage(); } /** * 请求VrsVideos数据 * * @author Liuheyuan * */ private class RequestVrsVideosList extends LetvHttpAsyncTask<OriginalVideo> { private boolean isNew = false; public RequestVrsVideosList(Context context, boolean isNew) { super(context, isNew); this.isNew = isNew; if (isNew) { startPos = 0; hopePos = 0; } } @Override public LetvDataHull<OriginalVideo> doInBackground() { LetvDataHull<OriginalVideo> dataHull = null; // dataHull = LetvHttpApi.requestVrsVideos(itemId, currentOrderBy, // startPos, num, new LetvGsonParser<OriginalVideo>(0, // OriginalVideo.class)); dataHull = LetvHttpApi.requestOriginalVideo( String.valueOf(originalColumn.id), startPos, num, new LetvGsonParser<OriginalVideo>(0, OriginalVideo.class)); // if (null != footerView) { // footerView.showLoading(); // } return dataHull; } @Override public void onPostExecute(int updateId, OriginalVideo result) { synchronized (adapter.getOriginalVideos()) { if (isNew || null == adapter.getOriginalVideos()) { adapter.setOriginalVideos(result); } else { adapter.getOriginalVideos().body.videos = (Video[]) LetvUtil .addAllArrays( adapter.getOriginalVideos().body.videos, result.body.videos); adapter.getOriginalVideos().body.total = result.body.total; } startPos += num; if (null != footerView) { footerView.hide(); } // 通知界面刷新数据 refrashListView(); } } @Override public void dataNull(int updateId, String errMsg) { super.dataNull(updateId, errMsg); if (null != footerView) { footerView.showRefresh(); } } @Override public void netErr(int updateId, String errMsg) { super.netErr(updateId, errMsg); if (null != footerView) { footerView.showRefresh(); } } @Override public void netNull() { super.netNull(); if (null != footerView) { footerView.showRefresh(); } } } @Override public void onDestroyView() { super.onDestroyView(); /** * frament 销毁时,移除此fragment */ Fragment fragment = getFragmentManager().findFragmentById( mListView.getId()); FragmentTransaction ft = getActivity().getSupportFragmentManager() .beginTransaction(); if (null != fragment) { ft.remove(fragment).commitAllowingStateLoss(); } } }