CookbookDetailFragment.java 6.02 KB
package com.naji.xiaotao.cookbook.ui;

import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import com.naji.xiaotao.R;
import com.naji.xiaotao.cookbook.bean.CookbookDetailEntity;
import com.naji.xiaotao.cookbook.bean.CookbookEntity;
import com.naji.xiaotao.cookbook.listener.CheckListener;
import com.naji.xiaotao.cookbook.adapter.ClassifyDetailAdapter;
import com.naji.xiaotao.cookbook.itemdecoration.ItemHeaderDecoration;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.presenter.SortDetailPresenter;
import com.naji.xiaotao.tangshi.entity.OrderEntity;

import java.util.ArrayList;
import java.util.List;

public class CookbookDetailFragment extends BaseFragment<SortDetailPresenter, String> implements CheckListener {
    private RecyclerView mRv;
    private ClassifyDetailAdapter mAdapter;
    private LinearLayoutManager mManager;
    private List<CookbookDetailEntity> mDatas = new ArrayList<>();
    private ItemHeaderDecoration mDecoration;
    private boolean move = false;
    private int mIndex = 0;
    private CheckListener checkListener;


    @Override
    protected int getLayoutId() {
        return R.layout.fragment_sort_detail;
    }

    @Override
    protected void initCustomView(View view) {
        mRv = (RecyclerView) view.findViewById(R.id.rv);
    }

    @Override
    protected void initListener() {
        mRv.addOnScrollListener(new RecyclerViewListener());
    }

    @Override
    protected SortDetailPresenter initPresenter() {
        showRightPage(1);
//        mManager = new GridLayoutManager(mContext, 3);
//        //通过isTitle的标志来判断是否是title
//        mManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
//            @Override
//            public int getSpanSize(int position) {
//                return mDatas.get(position).isTitle() ? 3 : 1;
//            }
//        });
        mManager=new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL,false);
        mRv.setLayoutManager(mManager);
        String fromSource="";
        if(!TextUtils.isEmpty(getArguments().getString("fromSource"))){
            fromSource=getArguments().getString("fromSource");
        }
        mAdapter = new ClassifyDetailAdapter(mContext, mDatas,getArguments().getString("orderid"),fromSource,getArguments().getBoolean("isWaitingSure",false),new RvListener() {
            @Override
            public void onItemClick(int id, int position) {

            }
        });
        mRv.setAdapter(mAdapter);
        return new SortDetailPresenter();
    }


    public void initData(ArrayList<CookbookEntity> clists) {
        mDatas.clear();
        for (int i=0;i<clists.size();i++){
            CookbookDetailEntity head=new CookbookDetailEntity();
            head.setTitleName(clists.get(i).getClass_name());
            head.setTitle(true);
            head.setTag(String.valueOf(i));
            mDatas.add(head);
            for(int j=0;j<clists.get(i).getCookbooklist().get(0).size();j++){
                CookbookDetailEntity content=clists.get(i).getCookbooklist().get(0).get(j);
                content.setTag(String.valueOf(i));
                content.setTitleName(clists.get(i).getClass_name());
                mDatas.add(content);
            }
        }
        if(mDecoration==null){
            mDecoration = new ItemHeaderDecoration(mContext, mDatas);
            mRv.addItemDecoration(mDecoration);
            mDecoration.setCheckListener(checkListener);
        }
        mDecoration.setData(mDatas);
        mAdapter.notifyDataSetChanged();
    }

    @Override
    public void onClick(View v) {

    }

    @Override
    public void refreshView(int code, String data) {

    }

    public void setData(int n) {
        mIndex = n;
        mRv.stopScroll();
        smoothMoveToPosition(n);
    }

    @Override
    protected void getData() {

    }

    public void setListener(CheckListener listener) {
        this.checkListener = listener;
    }

    private void smoothMoveToPosition(int n) {
        int firstItem = mManager.findFirstVisibleItemPosition();
        int lastItem = mManager.findLastVisibleItemPosition();
        Log.d("first--->", String.valueOf(firstItem));
        Log.d("last--->", String.valueOf(lastItem));
        if (n <= firstItem) {
            mRv.scrollToPosition(n);
        } else if (n <= lastItem) {
            Log.d("pos---->", String.valueOf(n) + "VS" + firstItem);
            int top = mRv.getChildAt(n - firstItem).getTop();
            Log.d("top---->", String.valueOf(top));
            mRv.scrollBy(0, top);
        } else {
            mRv.scrollToPosition(n);
            move = true;
        }
    }


    @Override
    public void check(int position, boolean isScroll) {
        checkListener.check(position, isScroll);
    }


    private class RecyclerViewListener extends RecyclerView.OnScrollListener {
        @Override
        public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
            super.onScrollStateChanged(recyclerView, newState);
            if (move && newState == RecyclerView.SCROLL_STATE_IDLE) {
                move = false;
                int n = mIndex - mManager.findFirstVisibleItemPosition();
                Log.d("n---->", String.valueOf(n));
                if (0 <= n && n < mRv.getChildCount()) {
                    int top = mRv.getChildAt(n).getTop();
                    Log.d("top--->", String.valueOf(top));
                    mRv.smoothScrollBy(0, top);
                }
            }
        }

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            super.onScrolled(recyclerView, dx, dy);
            if (move) {
                move = false;
                int n = mIndex - mManager.findFirstVisibleItemPosition();
                if (0 <= n && n < mRv.getChildCount()) {
                    int top = mRv.getChildAt(n).getTop();
                    mRv.scrollBy(0, top);
                }
            }
        }
    }


}