package com.kitty.poclient.fragment.store;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.AbsListView;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.PauseOnScrollListener;
import com.kitty.poclient.R;
import com.kitty.poclient.adapter.CommonGridViewAdapter;
import com.kitty.poclient.common.Constant;
import com.kitty.poclient.common.UpnpApp;
import com.kitty.poclient.common.ViewFactory;
import com.kitty.poclient.common.WatchDog;
import com.kitty.poclient.domain.Album;
import com.kitty.poclient.domain.ColumnDetail;
import com.kitty.poclient.fragment.TabWebFragment.TitlebarUpdateFragment;
import com.kitty.poclient.http.HttpGetter;
import com.kitty.poclient.interfaces.NobleMan;
import com.kitty.poclient.interfaces.SelfReloader;
import com.kitty.poclient.thread.Pools;
import com.kitty.poclient.util.AnimUtil;
import com.kitty.poclient.util.JsonUtil;
//notifyData,Looper.prepare,null",Log.e
public class ColumnDetailFragment extends Fragment implements NobleMan, TitlebarUpdateFragment,SelfReloader {
private final String TAG = "ColumnDetailFragment: ";
private Context context;
/*
* 控件
*/
private View view;
private LinearLayout llLoading;
private LinearLayout llNoData;
private LinearLayout llDataLoadFailed;
private RelativeLayout rlContent;
private GridView gvAlbums;
private LinearLayout llLoadingMore;
private CommonGridViewAdapter adapter;
/*
* 数据
*/
public ColumnDetail columnDetail;
private List<Album> albums = new ArrayList<Album>();
private String columnName = "";
private long columnId = -1L;
private int firstVisibleItemPosition = 0;// 记录停止卷动时第一个ITEM的序号
private int lastVisibleItemPosition = 14;// 记录停止卷动时最后一个ITEM的序号
// private int scrollTop = 0;// 记录停止卷动时第一个ITEM距离顶端的偏移量
private boolean isGettingData = false;
private boolean dataLoadFinished = false;
/* 新的图片加载类 */
private ImageLoader loader;
private DisplayImageOptions options;
/*
* 刷新界面
*/
private final int MSG_IMG_GOT = 0;
private final int MSG_ALBUMS_GOT = 1;
private final int MSG_DATA_LOAD_FAILD = 2;
// private final int MSG_SHOW_LOADING_MORE = 3;
// private final int MSG_HIDE_LOADING_MORE = 4;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_IMG_GOT:
if (adapter != null) {
// endLoading();
adapter.notifyDataSetChanged();
}
break;
case MSG_ALBUMS_GOT:
if (albums != null && albums.size() != 0) {
endLoading();
printAlbums(adapter.getAlbums());
adapter.notifyDataSetChanged();
gvAlbums.setSelection(firstVisibleItemPosition);
// loadAlbumCovers();
// paintAlbumsWithinSightNFreeOthers();
hideLoadingAnimation();
} else if (albums != null && albums.size() == 0) {
showNoData();
}
isGettingData = false;
break;
case MSG_DATA_LOAD_FAILD:
uiShowDataLoadFailed();
break;
// case MSG_SHOW_LOADING_MORE:
// llLoadingMore.setVisibility(View.VISIBLE);
// break;
//
// case MSG_HIDE_LOADING_MORE:
// llLoadingMore.setVisibility(View.GONE);
// break;
}
super.handleMessage(msg);
}
};
// private BroadcastReceiver fitBotiqueDetailTitleReceier = new BroadcastReceiver() {
//
// @Override
// public void onReceive(Context context, Intent intent) {
// parentActivityChangeTitle();
// parentActivityChangeButton("btnBack");
// }
// };
public ColumnDetailFragment() {
}
public void letsSeeHeaven() {
for (int i = 6; i < albums.size(); i++) {
albums.get(i).recyleBitmap();
}
albums = null;
columnDetail = null;
}
protected void showNoData() {
Log.e("BUG953",TAG+"showNoData");
llLoading.setVisibility(View.GONE);
rlContent.setVisibility(View.GONE);
// gvAlbums.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.GONE);
llNoData.setVisibility(View.VISIBLE);
}
protected void uiShowDataLoadFailed() {
Log.e("BUG953",TAG+"uiShowDataLoadFailed");
rlContent.setVisibility(View.GONE);
// gvAlbums.setVisibility(View.GONE);
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.VISIBLE);
View loadFailureView=new ViewFactory().createLoadFailureView(this);
llDataLoadFailed.removeAllViews();
llDataLoadFailed.addView(loadFailureView);
}
public ColumnDetailFragment(Context context, ColumnDetail botiqueDetail, long botiqueId, String botiqueName) {
this.context = context;
this.columnId = botiqueId;
this.columnName = botiqueName;
// if (botiqueDetail != null) {
// this.botiqueDetail = botiqueDetail;
// this.albums = botiqueDetail.getAlbums();
// }
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
updateTitlebar();
view = LayoutInflater.from(UpnpApp.context).inflate(R.layout.column_detail, null);
view.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
initComponents();
initGridView();
initLoadingmoreAnim();
startLoading();
if (WatchDog.flagInColumnDetail == true) {
getSavedDataAndPosition();
} else {
getData(0, Constant.COLUMN_DETAIL_ITEMS_COUNT_PER_PAGE);
}
// registerReceivers();
return view;
}
private void initLoadingmoreAnim() {
ImageView ivAnim=(ImageView) llLoadingMore.findViewById(R.id.iv_loading_more);
new AnimUtil(context).initLoadingmoreAnim(ivAnim);
// AnimationDrawable ad=(AnimationDrawable)getResources().getDrawable(R.anim.login_seraching_anim);
// ivAnim.setBackgroundDrawable(ad);
// ad.start();
}
@Override
public void onResume() {
super.onResume();
// ((TabWebActivity)context).checkSlidingHidden();
WatchDog.currentSelfReloader = this;
}
private void startLoading() {
llLoading.setVisibility(View.VISIBLE);
llNoData.setVisibility(View.GONE);
rlContent.setVisibility(View.GONE);
// gvAlbums.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.GONE);
AnimationDrawable ad = (AnimationDrawable) getResources().getDrawable(R.anim.animatior_list);
llLoading.findViewById(R.id.iv_loading).setBackgroundDrawable(ad);
ad.start();
}
protected void endLoading() {
llLoading.setVisibility(View.GONE);
llNoData.setVisibility(View.GONE);
llDataLoadFailed.setVisibility(View.GONE);
rlContent.setVisibility(View.VISIBLE);
// gvAlbums.setVisibility(View.VISIBLE);
}
// private void parentActivityChangeTitle() {
// TabWebActivity.tvTitle.setText(columnName);
// // TabWebActivity.currentFragment = "精品聚焦-精品详情";
// }
//
// private void parentActivityChangeButton(String which) {
// TabWebActivity.changeButton(which);
// }
private void initComponents() {
llLoading = (LinearLayout) view.findViewById(R.id.ll_loading);
llNoData = (LinearLayout) view.findViewById(R.id.ll_no_data);
llDataLoadFailed = (LinearLayout) view.findViewById(R.id.ll_dataload_failed);
rlContent = (RelativeLayout) view.findViewById(R.id.rl_content);
llLoadingMore=(LinearLayout) rlContent.findViewById(R.id.ll_loading_anim);
}
private void initGridView() {
llLoadingMore.setVisibility(View.GONE);
gvAlbums = (GridView) view.findViewById(R.id.gv_albums);
adapter = new CommonGridViewAdapter(context, albums, this);
adapter.setAlbums(albums);
gvAlbums.setAdapter(adapter);
gvAlbums.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), false, true) {
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (firstVisibleItem + visibleItemCount >= totalItemCount) {//如果当前页已见底
//或获取更多数据
if (columnDetail != null && albums.size() < columnDetail.getTotal() && !isGettingData) {
//显示加载动画
showLoadingAnimation();
getData(albums.size(), 30);
isGettingData = true;
}
//或标记加载已完毕
else if (columnDetail != null && albums.size() >= columnDetail.getTotal()) {
if (!dataLoadFinished) {
dataLoadFinished = true;
}
}
}
super.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount);
}
@Override//卷动状态发生变化(滑动中-停止中-甩动中)
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == SCROLL_STATE_IDLE) {//如果当前状态为停止中
//获取可见头,可见尾
firstVisibleItemPosition = gvAlbums.getFirstVisiblePosition();
lastVisibleItemPosition = gvAlbums.getLastVisiblePosition();
Log.e(TAG, "view.getLastVisiblePosition()=" + view.getLastVisiblePosition());
Log.e(TAG, "columnDetail.getTotal()=" + columnDetail.getTotal());
//如果可见尾等于数据总长度,提示“加载完成”
if (lastVisibleItemPosition >= columnDetail.getTotal() - 1) {
showDataLoadFinishedMsg();
}
}
super.onScrollStateChanged(view, scrollState);
}
});
}
protected void showLoadingAnimation() {
llLoadingMore.setVisibility(View.VISIBLE);
}
protected void hideLoadingAnimation() {
// 强制用户多观赏一会动画
handler.postDelayed(new Runnable() {
@Override
public void run() {
llLoadingMore.setVisibility(View.GONE);
}
}, 500);
}
protected void showDataLoadFinishedMsg() {
UpnpApp.mainHandler.showInfo(R.string.data_load_finished);
}
class Holder {
private TextView tvNum;
private TextView tvName;
private TextView tvArtist;
Holder(View convertView) {
tvNum = (TextView) convertView.findViewById(R.id.tv_num);
tvName = (TextView) convertView.findViewById(R.id.tv_music_name);
tvArtist = (TextView) convertView.findViewById(R.id.tv_music_artist);
}
}
public void getData(final int startItem, final int maxItems) {
// 开线程获取数据
Pools.executorService1.submit(new Runnable() {
@Override
public void run() {
String json = new HttpGetter(context).getColumnAlbumsList(columnId, columnName, startItem, maxItems);
Log.e("BUG953", TAG+"json="+json);
if (!(new JsonUtil().validate(json))) {
return;
}else{
columnDetail = new JsonUtil().getColumnDetail(json);
if (startItem == 0) {
albums.clear();
}
albums.addAll(columnDetail.getAlbums());
handler.sendEmptyMessage(MSG_ALBUMS_GOT);
}
}
});
}
@Override
public void onDetach() {
unregisterReceivers();
recycleBitmaps();
super.onDetach();
}
private void registerReceivers() {
// context.registerReceiver(fitBotiqueDetailTitleReceier, new IntentFilter("fitBotiqueDetailTitleReceier"));
// context.registerReceiver(collectTheFuckingGarbageReceiver, new
// IntentFilter("collectTheFuckingGarbageReceiver"));
}
private void unregisterReceivers() {
// context.unregisterReceiver(fitBotiqueDetailTitleReceier);
// context.unregisterReceiver(collectTheFuckingGarbageReceiver);
}
public void recordCurrentDataAndPosition() {
WatchDog.albumsInColumnDetail = albums;
WatchDog.fvipInColumnDetail = firstVisibleItemPosition;
WatchDog.lvipInColumnDetail = lastVisibleItemPosition;
WatchDog.flagInColumnDetail = true;
}
public void getSavedDataAndPosition() {
albums = WatchDog.albumsInColumnDetail;
adapter.setAlbums(albums);
printAlbums(albums);
firstVisibleItemPosition = WatchDog.fvipInColumnDetail;
lastVisibleItemPosition = WatchDog.lvipInColumnDetail;
handler.sendEmptyMessage(MSG_ALBUMS_GOT);
WatchDog.flagInColumnDetail = false;
WatchDog.albumsInColumnDetail = null;// ?
}
private void printAlbums(List<Album> _albums) {
for (Album album : _albums) {
Log.e(TAG, album.getName());
}
}
@Override
public int getFistVisiblePosition() {
return -1;
}
@Override
public int getLastVisiblePosition() {
return -1;
}
@Override
public void recycleBitmaps() {
}
@Override
public void updateTitlebar() {
WatchDog.tabWebFragment.setPopbackable(true);
WatchDog.tabWebFragment.setTitle(columnName);
}
@Override
public void onDataLoadFailed() {
Log.e("BUG953", TAG+"onDataLoadFailed");
handler.sendEmptyMessage(MSG_DATA_LOAD_FAILD);
}
@Override
public void reload() {
Log.e("BUG953", TAG+"reload");
startLoading();
getData(0, Constant.COLUMN_DETAIL_ITEMS_COUNT_PER_PAGE);
}
}