TangshiFragment.java 13.3 KB
package com.naji.xiaotao.tangshi.ui;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.naji.xiaotao.BR;
import com.naji.xiaotao.R;
import com.naji.xiaotao.cart.ui.CartActivity;
import com.naji.xiaotao.cookbook.adapter.SortAdapter;
import com.naji.xiaotao.cookbook.bean.CookbookDetailEntity;
import com.naji.xiaotao.cookbook.bean.CookbookEntity;
import com.naji.xiaotao.cookbook.itemdecoration.ItemHeaderDecoration;
import com.naji.xiaotao.cookbook.listener.CheckListener;
import com.naji.xiaotao.cookbook.listener.RvListener;
import com.naji.xiaotao.cookbook.ui.CookBookMainActivity;
import com.naji.xiaotao.cookbook.ui.CookbookDetailFragment;
import com.naji.xiaotao.databinding.ActivityTangShiBinding;
import com.naji.xiaotao.http.RetrofitClient;
import com.naji.xiaotao.order.ui.OrderActivity;
import com.naji.xiaotao.tangshi.entity.FastOrderEntity;
import com.naji.xiaotao.tangshi.entity.TableItem;
import com.naji.xiaotao.tangshi.entity.TangShiEntity;
import com.naji.xiaotao.tangshi.service.TangshiApiService;
import com.naji.xiaotao.tangshi.vm.TangShiItemViewModel;
import com.naji.xiaotao.tangshi.vm.TangShiViewModel;
import com.naji.xiaotao.util.DialogUtil;

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

import io.reactivex.disposables.Disposable;
import io.reactivex.functions.Consumer;
import me.goldze.mvvmhabit.base.BaseFragment;
import me.goldze.mvvmhabit.bus.RxBus;
import me.goldze.mvvmhabit.bus.RxSubscriptions;
import me.goldze.mvvmhabit.http.BaseResponse;
import me.goldze.mvvmhabit.http.ResponseThrowable;
import me.goldze.mvvmhabit.utils.KLog;
import me.goldze.mvvmhabit.utils.RxUtils;
import me.goldze.mvvmhabit.utils.SPUtils;
import me.goldze.mvvmhabit.utils.ToastUtils;

public class TangshiFragment extends Fragment implements CheckListener,TableListFragment.ItemCallback,View.OnClickListener{

    private TextView jiacai,cuicai,shoukuan,detail,zhuantai,tuicai,qingtai,bingtai,print,yujiedan,receipt;
    private LinearLayout yujidanLayout;
    private RecyclerView rvSort;
    private SortAdapter mSortAdapter;
    private TableListFragment mSortDetailFragment;
    private Context mContext;
    private LinearLayoutManager mLinearLayoutManager;
    private int targetPosition;//点击左边某一个具体的item的位置
    private boolean isMoved;

    public List<String> tabLists=new ArrayList<>();//tab标题list

    private ArrayList<TangShiEntity> lists=new ArrayList<>();//服务器返回的数据

    private String orderid;//当前点击item的orderid

    private Disposable mSubscription;//订阅者

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext=getContext();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.fragment_tangshi,null);
        initView(view);
        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        registerRxBus();
        getTableList();
    }

    public void registerRxBus() {
        mSubscription= RxBus.getDefault().toObservable(String.class).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Exception {
                KLog.d("refresh");
                if(!TextUtils.isEmpty(s)&&s.equals("refresh")){
                    getTableList();
                }
            }
        });
        RxSubscriptions.add(mSubscription);
    }

    @Override
    public void onStop() {
        super.onStop();
        removeRxBus();
    }

    public void removeRxBus() {
        RxSubscriptions.remove(mSubscription);
    }

    //获取桌位列表
    private void getTableList(){
        RetrofitClient.getInstance().create(TangshiApiService.class)
                .getTableList(SPUtils.getInstance("user_info").getString("sellerid"))
                .compose(RxUtils.schedulersTransformer()) //线程调度
                .compose(RxUtils.exceptionTransformer()) // 网络错误的异常转换, 这里可以换成自己的ExceptionHandle
                .doOnSubscribe(new Consumer<Disposable>() {
                    @Override
                    public void accept(Disposable disposable) throws Exception {
                        DialogUtil.showDialog(mContext);
                    }
                })
                .subscribe(new Consumer<BaseResponse<List<List<TangShiEntity>>>>() {

                    @Override
                    public void accept(BaseResponse<List<List<TangShiEntity>>> listBaseResponse) throws Exception {
                        DialogUtil.dismissDialog();
                        if(listBaseResponse.getRet()==200){
                            lists.clear();
                            lists.addAll(listBaseResponse.getData().get(0));
                            tabLists.clear();
                            for(TangShiEntity entity:lists){
                                tabLists.add(entity.getName());
                            }
                            initData();
                        }else{
                            ToastUtils.showShort(listBaseResponse.getMsg());
                        }

                    }
                }, new Consumer<ResponseThrowable>() {
                    @Override
                    public void accept(ResponseThrowable throwable) throws Exception {
                        DialogUtil.dismissDialog();
                        throwable.printStackTrace();
                        ToastUtils.showShort(throwable.getMessage());

                    }
                });
    }

    private void initView(View view) {
        jiacai=view.findViewById(R.id.jiacai);
        jiacai.setOnClickListener(this);
        cuicai=view.findViewById(R.id.cuicai);
        cuicai.setOnClickListener(this);
        shoukuan=view.findViewById(R.id.shoukuan);
        shoukuan.setOnClickListener(this);
        detail=view.findViewById(R.id.detail);
        detail.setOnClickListener(this);
        zhuantai=view.findViewById(R.id.zhuantai);
        zhuantai.setOnClickListener(this);
        tuicai=view.findViewById(R.id.tuicai);
        tuicai.setOnClickListener(this);
        qingtai=view.findViewById(R.id.qingtai);
        qingtai.setOnClickListener(this);
        bingtai=view.findViewById(R.id.bingtai);
        bingtai.setOnClickListener(this);
        yujidanLayout=view.findViewById(R.id.yujiedan_layout);
        yujidanLayout.setOnClickListener(this);
        print=view.findViewById(R.id.print);
        print.setOnClickListener(this);
        yujiedan=view.findViewById(R.id.yujiedan);
        yujiedan.setOnClickListener(this);
        receipt=view.findViewById(R.id.kedan);
        receipt.setOnClickListener(this);

        rvSort=view.findViewById(R.id.rv_sort);
        mLinearLayoutManager = new LinearLayoutManager(mContext);
        rvSort.setLayoutManager(mLinearLayoutManager);
    }

    private void initData() {
        mSortAdapter = new SortAdapter(mContext,tabLists, new RvListener() {
            @Override
            public void onItemClick(int id, int position) {
                if (mSortDetailFragment != null) {
                    targetPosition = position;
                    setChecked(position, true);
                }
            }
        });
        rvSort.setAdapter(mSortAdapter);
        createFragment();
    }

    public void createFragment() {
        FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
        mSortDetailFragment = new TableListFragment();
        Bundle bundle = new Bundle();
        bundle.putParcelableArrayList("right",lists);
        mSortDetailFragment.setArguments(bundle);
        mSortDetailFragment.setListener(this);
        mSortDetailFragment.setItemCallback(this);
        fragmentTransaction.add(R.id.lin_fragment, mSortDetailFragment);
        fragmentTransaction.commit();
    }

    private void setChecked(int position, boolean isLeft) {
        Log.d("p-------->", String.valueOf(position));
        if (isLeft) {
            mSortAdapter.setCheckedPosition(position);
            //此处的位置需要根据每个分类的集合来进行计算
            int count = 0;
            for (int i = 0; i < position; i++) {
                count += lists.get(i).getList().size();
            }
            count += position;
            mSortDetailFragment.setData(count);
            ItemHeaderDecoration.setCurrentTag(String.valueOf(targetPosition));//凡是点击左边,将左边点击的位置作为当前的tag
        } else {
            mSortAdapter.setCheckedPosition(position);
            ItemHeaderDecoration.setCurrentTag(String.valueOf(position));//如果是滑动右边联动左边,则按照右边传过来的位置作为tag

        }
        moveToCenter(position);
    }

    //将当前选中的item居中
    private void moveToCenter(int position) {
        //将点击的position转换为当前屏幕上可见的item的位置以便于计算距离顶部的高度,从而进行移动居中
        View childAt = rvSort.getChildAt(position - mLinearLayoutManager.findFirstVisibleItemPosition());
        if (childAt != null) {
            int y = (childAt.getTop() - rvSort.getHeight() / 2);
            rvSort.smoothScrollBy(0, y);
        }
    }

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

    @Override
    public void onResume() {
        super.onResume();
        initOperation();
    }

    private void initOperation(){
        jiacai.setEnabled(false);
        cuicai.setEnabled(false);
        shoukuan.setEnabled(false);
        detail.setEnabled(false);
        zhuantai.setEnabled(false);
        tuicai.setEnabled(false);
        qingtai.setEnabled(false);
        bingtai.setEnabled(false);
        print.setEnabled(false);
        yujiedan.setEnabled(false);
        receipt.setEnabled(false);
    }

    @Override
    public void onItemCallback(TableItem item) {
        initOperation();
        if(item.isTitle()){

        }else{
            orderid=item.getOrderid();
            switch(item.getStatus()){
                case "":

                    break;
                case "点餐中":
                case "待确认":
//                    qingtai.setEnabled(true);
//                    zhuantai.setEnabled(true);
                    if(item.getMessage_count()>0){
                       MessageDialog dialog=new MessageDialog();
                       Bundle bundle=new Bundle();
                        bundle.putString("orderid",item.getOrderid());
                        bundle.putString("tablename",item.getName());
                        bundle.putString("tableid",item.getId());
                        if(item.getStatus().equals("待确认")){
                            bundle.putBoolean("isWaitingSure",true);
                        }
                        bundle.putParcelableArrayList("message", (ArrayList<? extends Parcelable>) item.getMessageList());
                        dialog.setArguments(bundle);
                        dialog.show(getChildFragmentManager(),"messageDialogSimple");
                    }
                    break;
                    case "待结账":
//                        jiacai.setEnabled(true);
//                        shoukuan.setEnabled(true);
//
//                        zhuantai.setEnabled(true);
//                        tuicai.setEnabled(true);
//                        qingtai.setEnabled(true);
//                        print.setEnabled(true);
//                        yujiedan.setEnabled(true);
//                        receipt.setEnabled(true);
                        detail.setEnabled(true);
                        if(item.getMessage_count()>0){
                            MessageDialog dialog=new MessageDialog();
                            Bundle bundle=new Bundle();
                            bundle.putString("orderid",item.getOrderid());
                            bundle.putString("tablename",item.getName());
                            bundle.putString("tableid",item.getId());
                            bundle.putParcelableArrayList("message", (ArrayList<? extends Parcelable>) item.getMessageList());
                            dialog.setArguments(bundle);
                            dialog.show(getChildFragmentManager(),"messageDialogSimple");
                        }
                        break;
            }
        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.detail:
                Intent intent=new Intent(mContext, OrderActivity.class);
                intent.putExtra("orderid",orderid);
                startActivity(intent);
                break;
        }
    }
}