package com.tejia.lijin.app.ui.recommend;
|
|
import android.content.Intent;
|
import android.graphics.drawable.AnimationDrawable;
|
import android.os.Bundle;
|
import android.provider.Settings;
|
|
import androidx.viewpager.widget.PagerAdapter;
|
import androidx.viewpager.widget.ViewPager;
|
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.RecyclerView;
|
|
import android.util.Log;
|
import android.view.Gravity;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.view.View.OnClickListener;
|
import android.widget.FrameLayout;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
import android.widget.Toast;
|
|
import com.google.gson.Gson;
|
import com.google.gson.GsonBuilder;
|
import com.google.gson.reflect.TypeToken;
|
import com.tejia.lijin.app.entity.RecommendGoods;
|
import com.umeng.analytics.MobclickAgent;
|
import com.viewpagerindicator.CirclePageIndicator;
|
import com.wpc.library.RetainViewFragment;
|
import com.wpc.library.content.ConnectivityChangeHelper;
|
import com.wpc.library.util.NetUtils;
|
import com.wpc.library.util.common.DimenUtils;
|
import com.wpc.library.widget.MyGridView;
|
import com.wpc.library.widget.RatioLayout;
|
import com.tejia.lijin.app.BasicTextHttpResponseHandler;
|
import com.tejia.lijin.app.R;
|
import com.tejia.lijin.app.ShoppingApi;
|
import com.tejia.lijin.app.entity.FirstCategory;
|
import com.tejia.lijin.app.entity.HomeBanner;
|
import com.tejia.lijin.app.entity.PushEventData;
|
import com.tejia.lijin.app.entity.SecondCategory;
|
import com.tejia.lijin.app.entity.TaoBaoGoodsBrief;
|
import com.tejia.lijin.app.ui.category.RecommendTopCategoryAdapter;
|
|
import org.apache.http.Header;
|
import org.json.JSONObject;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 精选分类
|
*/
|
public class RecommendCategoryFragment extends RetainViewFragment implements OnClickListener {
|
|
private SwipeRefreshLayout srl_second_category;
|
private RecyclerView lv_second_category;
|
private MyGridView gv_category_top;
|
private RecommendGoodsAdapter adapter;//淘宝商品适配
|
|
private ViewPager vp_banner;
|
private CirclePageIndicator indicator_category;
|
private RecommendTopAdapter bannerAdapter;
|
|
private FirstCategory firstCategory;
|
private List<SecondCategory> secondList = new ArrayList<>();
|
private List<TaoBaoGoodsBrief> mList = new ArrayList<>();
|
private List<HomeBanner> mBanners = new ArrayList<>();
|
private int page = 1;
|
private ImageView iv_slid_top;
|
private boolean isLoad = true;
|
View top_view;
|
View bottom;
|
TextView tv_loading;
|
ImageView iv_loading;
|
private int count = 1;
|
private LinearLayout ll_no_net, ll_no_data, ll_request_failture;
|
private ConnectivityChangeHelper mChangeHelper;
|
|
public static RecommendCategoryFragment newInstance(FirstCategory type, int position) {
|
RecommendCategoryFragment fragment = new RecommendCategoryFragment();
|
Bundle bundle = new Bundle();
|
bundle.putSerializable("type", type);
|
fragment.setArguments(bundle);
|
// firstCategory = (FirstCategory) bundle.getSerializable("type");
|
// Log.e("eee", "newInstance: " + position);
|
// Log.e("eee", "newInstance: " + firstCategory.getSwiperBannerId());
|
return fragment;
|
}
|
|
private RatioLayout vp_recommend_ratio; //vp_recommend_ratio 轮播滚动
|
|
@Override
|
public int getContentResource() {
|
return R.layout.fragment_second_category;
|
}
|
|
@Override
|
public void onCreateView(View contentView, Bundle savedInstanceState) {
|
srl_second_category = contentView.findViewById(R.id.srl_second_category);
|
lv_second_category = contentView.findViewById(R.id.lv_second_category);
|
|
iv_slid_top = contentView.findViewById(R.id.iv_slid_top);
|
iv_slid_top.setOnClickListener(this);
|
|
top_view = LayoutInflater.from(lv_second_category.getContext()).inflate(R.layout.item_category_top, null);
|
gv_category_top = top_view.findViewById(R.id.gv_category_top);
|
vp_banner = top_view.findViewById(R.id.vp_recommend);
|
indicator_category = top_view.findViewById(R.id.indicator_recommend);//轮播 小点
|
vp_recommend_ratio = top_view.findViewById(R.id.vp_recommend_ratio);//轮播滚动 布局
|
gv_category_top.getFocusedChild();
|
|
vp_banner.setCurrentItem(0, true);
|
bannerAdapter = new RecommendTopAdapter(mBanners, getActivity(), false);
|
vp_banner.setAdapter(bannerAdapter);
|
vp_banner.postDelayed(mAutoScroller, 2000);
|
|
float hRatio = 260 / 720f;
|
float wRatio = 23 / 720f;
|
int bottomPo = (int) (DimenUtils.getScreenWidth(getActivity()) * hRatio);
|
int rightPo = (int) (DimenUtils.getScreenWidth(getActivity()) * wRatio);
|
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(DimenUtils.dip2px(getActivity(), 40), DimenUtils.dip2px(getActivity(), 40));
|
params.setMargins(0, 0, rightPo, bottomPo);
|
params.gravity = Gravity.BOTTOM | Gravity.RIGHT;
|
iv_slid_top.setLayoutParams(params);
|
bottom = LayoutInflater.from(getContext()).inflate(R.layout.item_recyclerview_bottom, null);
|
tv_loading = bottom.findViewById(R.id.tv_loading);
|
iv_loading = bottom.findViewById(R.id.iv_loading);
|
AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(
|
R.drawable.anim_list_loading);
|
iv_loading.setImageDrawable(animationDrawable);
|
animationDrawable.start();
|
// Glide.with(this).load(R.drawable.gif_loading).into(iv_loading);
|
bottom.setVisibility(View.GONE);
|
firstCategory = (FirstCategory) getArguments().getSerializable("type");
|
if (firstCategory == null) {
|
srl_second_category.setEnabled(false);
|
} else {
|
srl_second_category.setEnabled(true);
|
}
|
lv_second_category.setLayoutManager(new LinearLayoutManager(lv_second_category.getContext()));
|
// lv_second_category.setBackgroundColor(getResources().getColor(R.color.white));
|
// adapter = new RecommendCategoryAdapter(lv_second_category.getContext(), mList,
|
// firstCategory == null ? null : firstCategory.getName(), "firstclass");
|
|
adapter = new RecommendGoodsAdapter(lv_second_category.getContext(), mList, "firstclass");
|
|
// adapter.isFirst = true;
|
lv_second_category.setAdapter(adapter);
|
adapter.addFooterView(bottom);
|
|
ll_no_net = contentView.findViewById(R.id.ll_no_net);
|
ll_no_data = contentView.findViewById(R.id.ll_no_data);
|
ll_request_failture = contentView.findViewById(R.id.ll_request_failture);
|
contentView.findViewById(R.id.tv_net_setting).setOnClickListener(this);
|
contentView.findViewById(R.id.tv_refresh).setOnClickListener(this);
|
mChangeHelper = new ConnectivityChangeHelper(ll_no_net.getContext(),
|
new ConnectivityChangeHelper.OnConnectivityChangeListener() {
|
|
@Override
|
public void onNetworkUnAvailable() {
|
if (mList.size() == 0)
|
requestState(3);
|
}
|
|
@Override
|
public void onNetworkAvailable() {
|
requestState(0);
|
if (mList.size() == 0) {
|
getGoodsList();
|
getCateGorySecond();
|
}
|
}
|
});
|
|
srl_second_category.setRefreshing(true);
|
srl_second_category.setColorSchemeColors(getResources().getColor(R.color.theme));
|
srl_second_category.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
|
@Override
|
public void onRefresh() {
|
page = 1;
|
getCateGorySecond();
|
getGoodsList();
|
}
|
});
|
|
lv_second_category.addOnScrollListener(new RecyclerView.OnScrollListener() {
|
@Override
|
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
|
super.onScrollStateChanged(recyclerView, newState);
|
LinearLayoutManager manager = (LinearLayoutManager) recyclerView.getLayoutManager();
|
int first = manager.findFirstVisibleItemPosition();
|
int last = manager.findLastVisibleItemPosition();
|
int total = manager.getItemCount();
|
if (newState == RecyclerView.SCROLL_STATE_IDLE) {
|
if (first == 0) {
|
iv_slid_top.setVisibility(View.GONE);
|
}
|
if (last == total - 1 && mList.size() < count && isLoad) {
|
page++;
|
isLoad = false;
|
tv_loading.setText(getResources().getString(R.string.loading_more_text));
|
iv_loading.setVisibility(View.VISIBLE);
|
getGoodsList();
|
}
|
}
|
// else {
|
// iv_slid_top.setVisibility(View.GONE);
|
// }
|
}
|
|
@Override
|
public void onScrolled(RecyclerView recyclerView, int dx, final int dy) {
|
super.onScrolled(recyclerView, dx, dy);
|
if (Math.abs(dy) > 10) {
|
if (dy > 0) {
|
iv_slid_top.setVisibility(View.GONE);
|
} else {
|
iv_slid_top.setVisibility(View.VISIBLE);
|
}
|
}
|
}
|
});
|
getGoodsList();
|
getCateGorySecond();
|
}
|
|
@Override
|
public void onCreate(Bundle savedInstanceState) {
|
super.onCreate(savedInstanceState);
|
}
|
|
private Runnable mAutoScroller = new Runnable() {
|
|
@Override
|
public void run() {
|
PagerAdapter adapter = vp_banner.getAdapter();
|
if (adapter != null && adapter.getCount() != 0) {
|
vp_banner.setCurrentItem((vp_banner.getCurrentItem() + 1)
|
% adapter.getCount(), true);
|
}
|
vp_banner.postDelayed(this, 5000);
|
}
|
};
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
mChangeHelper.registerReceiver();
|
indicator_category.setViewPager(vp_banner);
|
|
long stayTime = System.currentTimeMillis() - bannerAdapter.clickTime;
|
if (bannerAdapter.clickTime > 0 && stayTime > 15 * 1000) {
|
PushEventData info = new PushEventData();
|
info.setId(bannerAdapter.clickId);
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
String data = gson.toJson(info);
|
bannerAdapter.clickTime = 0;
|
bannerAdapter.clickId = "";
|
}
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
mChangeHelper.unregisterReceiver();
|
srl_second_category.setRefreshing(false);
|
srl_second_category.destroyDrawingCache();
|
srl_second_category.clearAnimation();
|
}
|
|
|
private void getGoodsList() {
|
if (firstCategory == null) {
|
srl_second_category.setRefreshing(false);
|
return;
|
}
|
|
ShoppingApi.getRecommendSecondGoods(lv_second_category.getContext(), page + "", firstCategory.getClassId(),
|
new BasicTextHttpResponseHandler() {
|
@Override
|
public void onStart() {
|
super.onStart();
|
if (page > 1) {
|
bottom.setVisibility(View.VISIBLE);
|
} else {
|
bottom.setVisibility(View.GONE);
|
}
|
}
|
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
bottom.setVisibility(View.GONE);
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<TaoBaoGoodsBrief> list = gson.fromJson(
|
jsonObject.getJSONObject("data").optJSONArray("result").toString(),
|
new TypeToken<List<TaoBaoGoodsBrief>>() {
|
}.getType());
|
if (page == 1)
|
mList.clear();
|
mList.addAll(list);
|
adapter.notifyDataSetChanged();
|
// adapter.notifyItemRangeChanged(mList.size(), list.size());//倒序刷新列表
|
isLoad = true;
|
count = Integer.parseInt(jsonObject.optJSONObject("data").optString("count"));
|
|
if (mList.size() == count) {
|
bottom.setVisibility(View.VISIBLE);
|
iv_loading.setVisibility(View.GONE);
|
tv_loading.setText(getResources().getString(R.string.list_no_more));
|
}
|
requestState(mList.size() == 0 ? 1 : 0);
|
} else {
|
if (mList.size() == 0)
|
requestState(2);
|
// SingleToast.showToast(lv_second_category.getContext(), jsonObject.optString("msg"));
|
Toast.makeText(lv_second_category.getContext(), jsonObject.optString("msg"), Toast.LENGTH_SHORT).show();
|
}
|
}
|
|
@Override
|
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
|
super.onFailure(statusCode, headers, responseString, throwable);
|
Log.i("mResult", "请求错误--" + responseString);
|
bottom.setVisibility(View.GONE);
|
if (mList.size() == 0) {
|
if (NetUtils.getNetworkState(iv_loading.getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
requestState(3);
|
} else {
|
requestState(2);
|
}
|
} else {
|
if (NetUtils.getNetworkState(getContext()).equalsIgnoreCase(NetUtils.NETWORK_NONE)) {
|
// SingleToast.showToast(lv_second_category.getContext(), "网络未连接,请检测网络设置");
|
Toast.makeText(lv_second_category.getContext(), "网络未连接,请检测网络设置", Toast.LENGTH_SHORT).show();
|
} else {
|
// SingleToast.showToast(lv_second_category.getContext(), "网络连接异常,请检测网络设置");
|
Toast.makeText(lv_second_category.getContext(), "网络连接异常,请检测网络设置", Toast.LENGTH_SHORT).show();
|
}
|
}
|
}
|
});
|
}
|
|
private void getCateGorySecond() {
|
if (firstCategory == null) {
|
srl_second_category.setRefreshing(false);
|
return;
|
}
|
ShoppingApi.getSecondCategory(lv_second_category.getContext(), firstCategory.getClassId(), ((FirstCategory) getArguments().getSerializable("type")).getSwiperBannerId(), new BasicTextHttpResponseHandler() {
|
@Override
|
public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception {
|
if (jsonObject.optString("code").equalsIgnoreCase("0")) {
|
Gson gson = new GsonBuilder().serializeNulls().create();
|
List<SecondCategory> list = gson.fromJson(
|
jsonObject.optJSONObject("data").optJSONArray("goodsSecondClassList").toString(),
|
new TypeToken<List<SecondCategory>>() {
|
}.getType());
|
if (secondList.size() > 0)
|
secondList.clear();
|
secondList.addAll(list);
|
if (gv_category_top.getAdapter() == null) {
|
gv_category_top.setAdapter(new RecommendTopCategoryAdapter(lv_second_category.getContext(), secondList, firstCategory.getName()));
|
gv_category_top.setFocusable(true);
|
gv_category_top.setFocusableInTouchMode(true);
|
gv_category_top.requestFocus();
|
gv_category_top.requestFocusFromTouch();
|
} else {
|
((RecommendTopCategoryAdapter) gv_category_top.getAdapter()).notifyDataSetChanged();
|
}
|
if (secondList == null || secondList.size() == 0) { //当数据为0的时候 隐藏九宫格分类
|
gv_category_top.setVisibility(View.GONE);
|
} else {
|
gv_category_top.setVisibility(View.VISIBLE);
|
if (!adapter.haveHeaderView())
|
adapter.addHeaderView(top_view);
|
}
|
|
Gson gson2 = new GsonBuilder().serializeNulls().create();
|
List<HomeBanner> list2 = gson2.fromJson(
|
jsonObject.optJSONObject("data").optJSONArray("picList").toString(),
|
new TypeToken<List<HomeBanner>>() {
|
}.getType());
|
if (mBanners != null && mBanners.size() > 0) {
|
mBanners.clear();
|
}
|
mBanners.addAll(list2);
|
bannerAdapter.notifyDataSetChanged();
|
if (mBanners == null || mBanners.size() == 0) { //没有数据 隐藏 轮播
|
vp_recommend_ratio.setVisibility(View.GONE);
|
} else { //有条数据的时候
|
vp_recommend_ratio.setVisibility(View.VISIBLE);
|
if (mBanners.size() > 1) {
|
indicator_category.setVisibility(View.VISIBLE);//轮播小点
|
} else {
|
indicator_category.setVisibility(View.GONE);
|
}
|
}
|
} else {
|
gv_category_top.setVisibility(View.GONE);
|
vp_recommend_ratio.setVisibility(View.GONE);
|
}
|
}
|
|
@Override
|
public void onFinish() {
|
super.onFinish();
|
srl_second_category.setRefreshing(false);
|
}
|
});
|
}
|
|
@Override
|
public void onClick(View v) {
|
switch (v.getId()) {
|
case R.id.iv_slid_top:
|
lv_second_category.getLayoutManager().scrollToPosition(0);
|
break;
|
case R.id.tv_net_setting:
|
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
break;
|
case R.id.tv_refresh:
|
startActivity(new Intent(Settings.ACTION_SETTINGS));
|
break;
|
}
|
}
|
|
/**
|
* 请求状态 0 数据正常展示;1 返回数据为空;2 网络请求失败;3 没有连接网络
|
*
|
* @param state
|
*/
|
private void requestState(int state) {
|
srl_second_category.setVisibility(state == 0 ? View.VISIBLE : View.GONE);
|
lv_second_category.setVisibility(state == 0 ? View.VISIBLE : View.GONE);
|
ll_no_data.setVisibility(state == 1 ? View.VISIBLE : View.GONE);
|
ll_request_failture.setVisibility(state == 2 ? View.VISIBLE : View.GONE);
|
ll_no_net.setVisibility(state == 3 ? View.VISIBLE : View.GONE);
|
}
|
}
|