package com.dofrom.android.payontime.fragment.paybazaar;
import android.content.Intent;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.dofrom.android.payontime.R;
import com.dofrom.android.payontime.activity.find.paybazaar.BazaarDetailActivity;
import com.dofrom.android.payontime.activity.find.paybazaar.FuSearchActivity;
import com.dofrom.android.payontime.activity.find.paybazaar.FuSelectMarketAcitivity;
import com.dofrom.android.payontime.activity.find.paybazaar.ViewPagerDetailActivity;
import com.dofrom.android.payontime.adapter.AbstractCommonListAdapter;
import com.dofrom.android.payontime.adapter.IViewPageAdapter;
import com.dofrom.android.payontime.base.BaseTitleFragment;
import com.dofrom.android.payontime.bean.fu_bean.FuHomeListBean;
import com.dofrom.android.payontime.bean.fu_bean.HomeBanners;
import com.dofrom.android.payontime.bean.fu_bean.ReleaseHomeBean;
import com.dofrom.android.payontime.bean.request_app.ReqNull;
import com.dofrom.android.payontime.bean.request_fu.ReqHomeList_Fu;
import com.dofrom.android.payontime.holder.ViewHolder;
import com.dofrom.android.payontime.net.HttpManager_fu;
import com.dofrom.android.payontime.net.subscriber.AbstractErrorHandleSubscriber;
import com.dofrom.android.payontime.utils.Constans;
import com.scwang.smartrefresh.layout.SmartRefreshLayout;
import com.scwang.smartrefresh.layout.api.RefreshLayout;
import com.scwang.smartrefresh.layout.listener.OnLoadmoreListener;
import com.scwang.smartrefresh.layout.listener.OnRefreshListener;
import com.zhy.adapter.recyclerview.CommonAdapter;
import com.zhy.adapter.recyclerview.MultiItemTypeAdapter;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
/**
* 作者 Y_MS
* Created by ${APEN} on 2018-09-21.
* GitHub:https://github.com/cxydxpx
*/
public class PayBazaarHomeFragment extends BaseTitleFragment implements OnRefreshListener, OnLoadmoreListener {
public static final int PAGE_CONTENT_INIT = 1;
private int mCurrentPage = PAGE_CONTENT_INIT;
private String mCityId = "";
@Override
protected int getLayoutResId() {
return R.layout.fragment_bazaar_home;
}
@Override
protected void showView() {
super.showView();
titleBar.setTextTitle("首页");
}
@Override
protected void initViews() {
super.initViews();
View mHeadView = View.inflate(getActivity(), R.layout.fragment_bazaar_home_header, null);
mListView.addHeaderView(mHeadView);
mViewPager = (ViewPager) mHeadView.findViewById(R.id.viewpager);
tvAddress = (TextView) mHeadView.findViewById(R.id.tv_address);
tvAddress.setOnClickListener(this);
tvNotic = (TextView) mHeadView.findViewById(R.id.tv_notic);
rlNotic = (RelativeLayout) mHeadView.findViewById(R.id.rl_notic);
tvMessageNum = (TextView) mHeadView.findViewById(R.id.tv_message_num);
}
ViewPager mViewPager;
TextView tvAddress;
TextView tvNotic;
RelativeLayout rlNotic;
TextView tvMessageNum;
private ArrayList<HomeBanners.BannersBean.IndexBean> mBannerList = new ArrayList<>();
/**
* 上一个新闻图片的索引位置
*/
private int previousPosition;
/**
* 注册页面改变监听
*/
private void registPageChangeListener() {
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
/**
* 广告条在滑动时,该方法执行一次
*/
public void onPageSelected(int position) {
// 当广告条选择完时,修改开关,继续轮播广告
int currentTitleIndex = position % mBannerList.size();
// 状态每改变一次,重新给上一个索引赋值
previousPosition = currentTitleIndex;
}
@Override
/**
* 广告条在滑动时,该方法多次执行.
*/
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels) {
}
@Override
/**
* 广告条在自动滑动时,该方法执行两次.
* 状态值为:先为2再为0
* position.
*/
public void onPageScrollStateChanged(int state) {
/**
* 解决当用户点击广告图片拖动时,广告条继续跳动的Bug
*/
switch (state) {
case ViewPager.SCROLL_STATE_DRAGGING: // 1
// Log.i(tag, "DRAGGING");
mHandler.removeMessages(66);
isRunning = false;
break;
case ViewPager.SCROLL_STATE_IDLE: // 0
// Log.i(tag, "IDLE");
if (!isRunning) {
isRunning = true;
mHandler.sendEmptyMessageDelayed(66, 2000);
}
break;
case ViewPager.SCROLL_STATE_SETTLING: // 2
// Log.i(tag, "SETTLING");
// mHandler.removeMessages(66);
break;
default:
break;
}
}
});
}
/**
* 判断广告条是否继续循环的标记,默认值为true
*/
private boolean isRunning = true;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(android.os.Message msg) {
// 当退出当前应用时,结束广告轮播
if (isRunning) {
// 每隔2秒更新一次当前广告条目,更新条目的索引为当前索引加1,切换到下一个页面
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
mHandler.sendEmptyMessageDelayed(66, 3000);
}
}
};
@Override
protected void initData() {
super.initData();
getBannersData();
getCommonDataFromService();
}
private void getCommonDataFromService() {
HttpManager_fu
.instance()
.releaseConfig(new ReqNull())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new AbstractErrorHandleSubscriber<ReleaseHomeBean>() {
@Override
protected void onSuccess(ReleaseHomeBean bean) {
parseCommonData(bean);
}
}
);
}
private List<ReleaseHomeBean.CateBean> mCommonDatas = new ArrayList<>();
private void parseCommonData(ReleaseHomeBean bean) {
mCommonDatas.clear();
mCommonDatas.addAll(bean.getCate());
mCommonDatas.add(new ReleaseHomeBean.CateBean("创建名片"));
if (null != mCommonAdapter) {
mCommonAdapter.notifyDataSetChanged();
}
}
@Override
protected void initListener() {
super.initListener();
refreshLayout.setOnRefreshListener(this);
refreshLayout.setOnLoadmoreListener(this);
refreshLayout.setEnableHeaderTranslationContent(false);
registPageChangeListener();
initAdater();
}
private AbstractCommonListAdapter mCommonAdapter;
private void initAdater() {
mCommonAdapter = new AbstractCommonListAdapter<FuHomeListBean.DataBean>(mContext, R.layout.fragment_bazaar_home_item, mDatas) {
@Override
protected void convert(ViewHolder holder, FuHomeListBean.DataBean bean, final int position) {
ImageView imageView = holder.getView(R.id.imageview);
TextView tvName = holder.getView(R.id.tv_name);
TextView tvDate = holder.getView(R.id.tv_date);
TextView tvMessage = holder.getView(R.id.tv_message);
TextView tvPrice = holder.getView(R.id.tv_price);
String unit = bean.getUnit() == null ? "" : bean.getUnit();
int price = bean.getPrice();
tvPrice.setText("¥ " + price + "/" + unit);
TextView tvContent = holder.getView(R.id.tv_content);
TextView tvAddress = holder.getView(R.id.tv_address);
tvAddress.setText(bean.getMarket_name() == null ? "" : bean.getMarket_name());
tvContent.setText(bean.getBody() == null ? "" : bean.getBody());
RecyclerView recyclerView = holder.getView(R.id.recyclerView);
RelativeLayout rlRecycler = holder.getView(R.id.rl_recycler);
List<String> image = bean.getImage();
if (image.size() > 0) {
rlRecycler.setVisibility(View.VISIBLE);
setRecylerAdater(recyclerView, image, position);
} else {
rlRecycler.setVisibility(View.GONE);
}
// type Int 类型,1出售51DD9E ,2求购 5EC9FF
for (int i = 0; i < mCommonDatas.size(); i++) {
ReleaseHomeBean.CateBean bean1 = mCommonDatas.get(i);
if (bean1.getId() == bean.getCate_id()) {
tvMessage.setText(bean1.getName() == null ? "" : bean1.getName());
}
}
tvDate.setText(bean.getAdd_date() == null ? "" : bean.getAdd_date());
tvName.setText(bean.getNickname() == null ? "" : bean.getNickname());
Glide
.with(mActivity)
.load(bean.getAvatarUrl())
.into(imageView);
}
};
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
FuHomeListBean.DataBean bean = mDatas.get(position);
startActivity(new Intent(mContext, BazaarDetailActivity.class)
.putExtra(Constans.extra_fu_bazaar_detail_activity, bean));
}
});
mListView.setAdapter(mCommonAdapter);
}
@Override
public void onRefresh(RefreshLayout refreshlayout) {
refresh();
}
@Override
public void onLoadmore(RefreshLayout refreshlayout) {
mCurrentPage++;
homeList(mCurrentPage);
}
@BindView(R.id.listview)
ListView mListView;
private void setRecylerAdater(RecyclerView mRecyclerView, List<String> image, final int posi) {
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(mContext);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
mRecyclerView.setItemAnimator(new DefaultItemAnimator());
CommonAdapter commonAdapter = new CommonAdapter<String>(mContext, R.layout.fragment_bazaar_home_recyler_item, image) {
@Override
protected void convert(com.zhy.adapter.recyclerview.base.ViewHolder holder, String str, int position) {
ImageView imageView = holder.getView(R.id.imageview);
Glide
.with(mActivity)
.load(Constans.FU_STATIC_IMAGE + str)
.into(imageView);
}
};
commonAdapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, RecyclerView.ViewHolder holder, int position) {
FuHomeListBean.DataBean bean = mDatas.get(posi);
startActivity(new Intent(mContext, BazaarDetailActivity.class)
.putExtra(Constans.extra_fu_bazaar_detail_activity, bean));
}
@Override
public boolean onItemLongClick(View view, RecyclerView.ViewHolder holder, int position) {
return false;
}
});
mRecyclerView.setAdapter(commonAdapter);
}
private void getBannersData() {
HttpManager_fu
.instance()
.homeBannersList(new ReqNull())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new AbstractErrorHandleSubscriber<HomeBanners>() {
@Override
protected void onSuccess(HomeBanners bean) {
HomeBanners.BannersBean banners = bean.getBanners();
List<HomeBanners.BannersBean.IndexBean> indexList = banners.getIndex() == null ? new ArrayList<HomeBanners.BannersBean.IndexBean>() : banners.getIndex();
parseIndexList(indexList);
HomeBanners.NoticeBean notice = bean.getNotice() == null ? new HomeBanners.NoticeBean() : bean.getNotice();
String str = notice.getContent() == null ? "" : notice.getContent();
if ("".equals(str)) {
rlNotic.setVisibility(View.GONE);
} else {
rlNotic.setVisibility(View.VISIBLE);
tvNotic.setText(str);
}
}
}
);
}
private void parseIndexList(List<HomeBanners.BannersBean.IndexBean> list) {
mBannerList.clear();
mBannerList.addAll(list);
if (mBannerList.size() > 0) {
IViewPageAdapter mAdapter = new IViewPageAdapter(mContext, mBannerList);
mViewPager.setAdapter(mAdapter);
mViewPager.setCurrentItem(10000000);
mHandler.sendEmptyMessageDelayed(66, 3000);
mAdapter.notifyDataSetChanged();
mAdapter.setOnItemClickListener(
new IViewPageAdapter.OnItemClickListener() {
@Override
public void onItemClick(HomeBanners.BannersBean.IndexBean bean) {
startActivity(new Intent(mContext, ViewPagerDetailActivity.class)
.putExtra(Constans.extra_fu_viewpager, bean));
}
}
);
}
}
@Override
protected void updateData() {
super.updateData();
homeMessageNum();
refresh();
}
private void homeMessageNum() {
HttpManager_fu
.instance()
.homeMessageNum(new ReqNull())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new AbstractErrorHandleSubscriber<String>() {
@Override
protected void onSuccess(String value) {
int v = Integer.parseInt(value == null ? "0" : value);
if (v > 0) {
tvMessageNum.setText(v);
}
}
}
);
}
private void refresh() {
mCurrentPage = PAGE_CONTENT_INIT;
homeList(mCurrentPage);
}
private void homeList(int page) {
HttpManager_fu
.instance()
.homeList(new ReqHomeList_Fu(String.valueOf(page), mCityId))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new AbstractErrorHandleSubscriber<FuHomeListBean>() {
@Override
protected void onSuccess(FuHomeListBean bean) {
parseList(bean);
}
}
);
}
private List<FuHomeListBean.DataBean> mDatas = new ArrayList<>();
@BindView(R.id.refreshLayout)
SmartRefreshLayout refreshLayout;
private void parseList(FuHomeListBean bean) {
List<FuHomeListBean.DataBean> list = bean.getData() == null ? new ArrayList<FuHomeListBean.DataBean>() : bean.getData();
if (mCurrentPage == PAGE_CONTENT_INIT) {
mDatas.clear();
}
if (mCurrentPage > 1 && (list.size() == 0 || null == list)) {
mCurrentPage--;
refreshLayout.finishRefresh();
refreshLayout.finishLoadmore();
return;
}
mDatas.addAll(list);
mCommonAdapter.notifyDataSetChanged();
refreshLayout.finishRefresh();
refreshLayout.finishLoadmore();
if (mDatas.size() == 0) {
// rlGone.setVisibility(View.VISIBLE);
} else {
// rlGone.setVisibility(View.GONE);
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (null != data) {
if (requestCode == Constans.REQUEST_FU_SELECT_ADDRESS) {
String name = data.getStringExtra(Constans.extra_fu_select_market_name);
String id = data.getStringExtra(Constans.extra_fu_select_market_id);
mCityId = id;
tvAddress.setText(name);
refresh();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
protected void processClick(View view) {
super.processClick(view);
switch (view.getId()) {
case R.id.iv_search:
startActivityForResult(new Intent(mContext, FuSearchActivity.class), Constans.request_fu_search);
break;
case R.id.tv_address:
startActivityForResult(new Intent(mContext, FuSelectMarketAcitivity.class), Constans.REQUEST_FU_SELECT_ADDRESS);
break;
default:
break;
}
}
@Override
// 当退出应用时,结束循环
public void onDestroy() {
super.onDestroy();
// 修改标记值
isRunning = false;
}
}