package com.sxjs.jd.composition.main.homefragment; import android.os.Build; import android.os.Bundle; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.LinearLayout; import com.sxjs.common.base.baseadapter.BaseQuickAdapter; import com.sxjs.common.util.ScreenUtil; import com.sxjs.common.widget.headerview.JDHeaderView; import com.sxjs.common.widget.pulltorefresh.PtrFrameLayout; import com.sxjs.common.widget.pulltorefresh.PtrHandler; import com.sxjs.jd.R; import com.sxjs.common.base.BaseFragment; import com.sxjs.jd.entities.HomeIndex; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; /** * @author 作者:admin on 2017/3/15 10:47. */ public class MainHomeFragment extends BaseFragment implements JDHeaderView.RefreshDistanceListener ,HomeContract.View, PositionChangedListener, BaseQuickAdapter.RequestLoadMoreListener { /** * 改变titlebar中icon颜色时的距离 */ private static int DISTANCE_WHEN_TO_SELECTED = 40; @BindView(R.id.scanning_layout) LinearLayout scanningLayout; @BindView(R.id.advisory_layout) LinearLayout advisoryLayout; @BindView(R.id.home_title_bar_layout) FrameLayout homeTitleBarLayout; @BindView(R.id.home_title_bar_bg_view) View homeTitleBarBgView; private View rootView = null; private RecyclerView recyclerView; private JDHeaderView mPtrFrame; private HomeMultipleRecycleAdapter adapter; private int distanceY; /** * 加载首页样式标记 */ private int flag = 1; @Inject HomePresenter mPresenter; public static MainHomeFragment newInstance() { return new MainHomeFragment(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.fragment_recycle, container, false); initBase(); unbinder = ButterKnife.bind(this, rootView); return rootView; } /** * 初始化下拉刷新及滚动距离title发生的改变 */ private void initBase() { DaggerHomeFragmentComponent.builder() .appComponent(getAppComponent()) .homePresenterModule(new HomePresenterModule(this)) .build() .inject(this); initPtrFrame(); recyclerView = (RecyclerView) this.rootView.findViewById(R.id.recyclerView); GridLayoutManager gridLayoutManager = new GridLayoutManager(recyclerView.getContext(), 4, GridLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(gridLayoutManager); recyclerView.addItemDecoration(new SpaceItemDecoration(ScreenUtil.dip2px(getContext(),3))); recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); distanceY += dy; if (distanceY > ScreenUtil.dip2px(mActivity, 20)) { homeTitleBarBgView.setBackgroundColor(getResources().getColor(R.color.white)); if (Build.VERSION.SDK_INT > 10) { homeTitleBarBgView.setAlpha(distanceY * 1.0f / ScreenUtil.dip2px(mActivity, 100)); } else { DISTANCE_WHEN_TO_SELECTED = 20; } } else { homeTitleBarBgView.setBackgroundColor(0); } if (distanceY > ScreenUtil.dip2px(mActivity, DISTANCE_WHEN_TO_SELECTED) && !scanningLayout.isSelected()) { scanningLayout.setSelected(true); advisoryLayout.setSelected(true); } else if (distanceY <= ScreenUtil.dip2px(mActivity, DISTANCE_WHEN_TO_SELECTED) && scanningLayout.isSelected()) { scanningLayout.setSelected(false); advisoryLayout.setSelected(false); } } }); adapter = new HomeMultipleRecycleAdapter(); /*recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { switch (newState){ //滑动停止 case RecyclerView.SCROLL_STATE_IDLE: break; //手指触摸屏幕停止或拖动时 case RecyclerView.SCROLL_STATE_DRAGGING: break; //滑动且手指离开屏幕 case RecyclerView.SCROLL_STATE_SETTLING: break; } } });*/ /*recyclerView.setOnFlingListener(new RecyclerView.OnFlingListener() { @Override public boolean onFling(int velocityX, int velocityY) { if(Math.abs(velocityY) > 5000){ } return false; } });*/ adapter.setOnLoadMoreListener(this); adapter.setEnableLoadMore(true); adapter.setListener(this); recyclerView.setAdapter(adapter); mPresenter.getHomeIndexData(flag); flag = 0; } /** * 初始化下拉刷新 */ private void initPtrFrame() { mPtrFrame = (JDHeaderView) rootView.findViewById(R.id.rotate_header_list_view_frame); mPtrFrame.setOnRefreshDistanceListener(this); mPtrFrame.setPtrHandler(new PtrHandler() { @Override public void onRefreshBegin(PtrFrameLayout frame) { updateData(); } }); // 是否进入页面就开始显示刷新动作 /*mPtrFrame.postDelayed(new Runnable() { @Override public void run() { mPtrFrame.autoRefresh(); } }, 100);*/ } /** * 下拉后刷新数据 */ private void updateData() { mPtrFrame.postDelayed(new Runnable() { @Override public void run() { mPresenter.getHomeIndexData(flag); if(flag == 0){ flag = 1; } else{ flag = 0; } } }, 1000); } @Override public void onStart() { super.onStart(); } @Override public void onPositionChange(int currentPosY) { if (currentPosY > 0) { if (homeTitleBarLayout.getVisibility() == View.VISIBLE) { homeTitleBarLayout.setVisibility(View.GONE); } } else { if (homeTitleBarLayout.getVisibility() == View.GONE) { homeTitleBarLayout.setVisibility(View.VISIBLE); distanceY = 0; } } } @Override public void setHomeIndexData(HomeIndex homeIndex) { if(homeIndex == null){ mPtrFrame.refreshComplete(); return; } adapter.getData().clear(); adapter.resetMaxHasLoadPosition(); adapter.setNewData(homeIndex.itemInfoList); mPtrFrame.refreshComplete(); } @Override public void setRecommendedWares(HomeIndex recommendedProducts) { adapter.getData().addAll(recommendedProducts.itemInfoList); adapter.loadMoreComplete(); } @Override public void setMoreRecommendedWares(HomeIndex moreRecommendedProducts) { adapter.getData().addAll(moreRecommendedProducts.itemInfoList); adapter.loadMoreComplete(); } /** * 当前recyclerView 的position的回调 * @param position */ @Override public void currentPosition(int position) { } @Override public void onLoadMoreRequested() { recyclerView.postDelayed(new Runnable() { @Override public void run() { if (adapter.getData().size() >= 90){ adapter.loadMoreEnd(false); } else{ mPresenter.getRecommendedWares(); } } },1000); } }