package net.coding.program.mall;
import android.graphics.Rect;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import net.coding.program.R;
import net.coding.program.common.BlankViewDisplay;
import net.coding.program.common.Global;
import net.coding.program.common.network.RefreshBaseAppCompatFragment;
import net.coding.program.model.MallItemObject;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.FragmentArg;
import org.androidannotations.annotations.ViewById;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
/**
* Created by libo on 2015/11/25.
*/
@EFragment(R.layout.fragment_mall_index_list)
public class MallListFragment extends RefreshBaseAppCompatFragment {
@ViewById
RecyclerView mallListHeaderGridView;
@ViewById
View blankLayout;
@FragmentArg
Type mType;
boolean isSlidingToLast = false;
final String USER_POINT_URL = Global.HOST_API + "/account/points";
double userPoint = 0.0;
ArrayList<MallItemObject> mData = new ArrayList<>();
String mDataUrl = Global.HOST_API + "/gifts?pageSize=20";
private MyRecyclerAdapter mAdapter;
View.OnClickListener onClickRetry = new View.OnClickListener() {
@Override
public void onClick(View v) {
onRefresh();
}
};
@AfterViews
void initView() {
initRefreshLayout();
if (mType.equals(Type.all_goods)) {
mDataUrl = Global.HOST_API + "/gifts?pageSize=20";
} else {
mDataUrl = Global.HOST_API + "/gifts?pageSize=20";
}
GridLayoutManager layoutManager = new GridLayoutManager(getActivity(), 2,
GridLayoutManager.VERTICAL, false);
mallListHeaderGridView.setLayoutManager(layoutManager);
mallListHeaderGridView.setItemAnimator(new DefaultItemAnimator());
//item间距
int space = getContext().getResources()
.getDimensionPixelSize(R.dimen.shop_list_item_vertical_space);
mallListHeaderGridView.addItemDecoration(new SpaceItemDecoration(space));
mAdapter = new MyRecyclerAdapter(mData, userPoint, getImageLoad(), getActivity());
mallListHeaderGridView.setAdapter(mAdapter);
//到底加载更多
mallListHeaderGridView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
GridLayoutManager manager = (GridLayoutManager) recyclerView.getLayoutManager();
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
int lastVisableItem = manager.findLastCompletelyVisibleItemPosition();
int totalItemCount = manager.getItemCount();
if (lastVisableItem == (totalItemCount - 1) && isSlidingToLast) {
//加载更多
loadMore();
}
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) {
isSlidingToLast = true;
} else {
isSlidingToLast = false;
}
}
});
getNetwork(USER_POINT_URL, USER_POINT_URL);
}
@Override
public void parseJson(int code, JSONObject respanse, String tag, int pos, Object data)
throws JSONException {
hideProgressDialog();
setRefreshing(false);
if (tag.equals(USER_POINT_URL)) {
if (code == 0) {
JSONObject jsonObject = respanse.getJSONObject("data");
userPoint = jsonObject.optDouble("points_left");
onRefresh();
} else {
showErrorMsg(code, respanse);
}
}
if (tag.equals(mDataUrl)) {
if (code == 0) {
if (isLoadingFirstPage(tag)) {
mData.clear();
// mAdapter = new MyRecyclerAdapter(mData, userPoint, getImageLoad(),
// getActivity());
// mallListHeaderGridView.setAdapter(mAdapter);
mAdapter.setUserPoint(userPoint);
mAdapter.removeAll();
}
JSONArray jsonArray = respanse.optJSONObject("data").optJSONArray("list");
for (int i = 0; i < jsonArray.length(); ++i) {
JSONObject json = jsonArray.getJSONObject(i);
MallItemObject orderObject = new MallItemObject(json);
if (mType == Type.all_goods) {
mData.add(orderObject);
} else if (mType == Type.can_change) {
if (orderObject.getPoints_cost() <= userPoint) {
mData.add(orderObject);
}
}
}
String tip = BlankViewDisplay.OTHER_MALL_EXCHANGE_BLANK;
BlankViewDisplay.setBlank(mData.size(), this, true, blankLayout, onClickRetry, tip);
mAdapter.removeAll();
mAdapter.addAll(mData);
mAdapter.notifyDataSetChanged();
} else {
showErrorMsg(code, respanse);
}
}
}
@Override
public void onRefresh() {
initSetting();
getNextPageNetwork(mDataUrl, mDataUrl);
}
@Override
public void loadMore() {
if (!isLoadingLastPage(mDataUrl)) {
showDialogLoading();
}
getNextPageNetwork(mDataUrl, mDataUrl);
}
public enum Type {
all_goods,
can_change
}
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpaceItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent,
RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space / 2;
// if(parent.getChildLayoutPosition(view) == 0)
// outRect.top = space;
}
}
}