Koltin32.Takeout订单界面下拉刷新(17)

OrderFragment.kt下拉刷新逻辑的实现

package com.example.takeout.ui.fragment

import android.app.Fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.example.takeout.R
import com.example.takeout.model.beans.Order
import com.example.takeout.presenter.OrderFragmentPresenter
import com.example.takeout.ui.adapter.OrderRvAdapter
import com.example.takeout.utils.TakeoutApp
import org.jetbrains.anko.find
import org.jetbrains.anko.toast

class OrderFragment : Fragment() {

    lateinit var rvOrder: RecyclerView
    lateinit var swipeLayout: SwipeRefreshLayout
    lateinit var orderPresenter: OrderFragmentPresenter
    lateinit var adapter: OrderRvAdapter

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val orderView = View.inflate(activity, R.layout.fragment_order, null)
        orderPresenter = OrderFragmentPresenter(this)
        rvOrder = orderView.find<RecyclerView>(R.id.rv_order_list)
        rvOrder.layoutManager = LinearLayoutManager(activity)
        adapter = OrderRvAdapter(activity)
        rvOrder.adapter = adapter
        swipeLayout = orderView.find<SwipeRefreshLayout>(R.id.srl_order)
        swipeLayout.setOnRefreshListener(object : SwipeRefreshLayout.OnRefreshListener{
            override fun onRefresh() {
                //下拉后重新请求
                val userId = TakeoutApp.sUser.id
                if (-1 == userId) {
                    toast("请先登录,再查看订单")
                } else {
                    orderPresenter.getOrderList(userId.toString())
                }
            }
        })
        return orderView
    }

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        //访问服务器,获取所有订单数据
        val userId = TakeoutApp.sUser.id
        if (-1 == userId) {
            toast("请先登录,再查看订单")
        } else {
            orderPresenter.getOrderList(userId.toString())
        }
    }

    fun onOrderSuccess(orderList: List<Order>) {
        //TODO:给adapter设置数据
        adapter.setOrderData(orderList)
        toast("服务器onOrderSuccess")
        swipeLayout.isRefreshing = false
    }

    fun onOrderFailed() {
        toast("服务器onOrderFailed")
        swipeLayout.isRefreshing = false
    }
}

OrderRvAdapter.kt界面优化

package com.example.takeout.ui.adapter

import android.content.Context
import android.content.Intent
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.takeout.R
import com.example.takeout.model.beans.Order
import com.example.takeout.utils.OrderObservable
import com.mob.wrappers.PaySDKWrapper
import org.jetbrains.anko.find

class OrderRvAdapter (val context: Context) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {

    private var orderList: List<Order> = ArrayList<Order>()

    fun setOrderData(orders: List<Order>) {
        this.orderList = orders
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
//        val itemView = View.inflate(context, R.layout.item_order_item, null)
        //TODO:没有填充满,原因是recycleview的孩子,测量模式是UNSPECIFY
        //通过返回值已经addview,如果attachToRoot使用true会再一次addView(),就会报错
        val itemView = LayoutInflater.from(context).inflate(R.layout.item_order_item,parent, false)
        return OrderItemHolder(itemView)
    }

    override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        (holder as OrderItemHolder).bindData(orderList.get(position))
    }

    override fun getItemCount(): Int {
        return orderList.size
    }

    inner class OrderItemHolder(item: View) : RecyclerView.ViewHolder(item) {
        val tvSellerName: TextView
        val tvOrderType: TextView
        init {
            //findviewbyId tv_order_item_seller_name tv_order_item_type
            tvSellerName = item.find(R.id.tv_order_item_seller_name)
            tvOrderType = item.find(R.id.tv_order_item_type) //订单状态
//            item.setOnClickListener {
//                val intent: Intent =  Intent(context, OrderDetailActivity::class.java)
//                intent.putExtra("orderId", order.id)
//                intent.putExtra("type", order.type)
//                context.startActivity(intent)
//            }
        }

        fun bindData(order: Order) {
            tvSellerName.text = order.seller?.name ?: "aaaa"
            tvOrderType.text = order.type?.let { getOrderTypeInfo(it) }
        }
    }

    private fun getOrderTypeInfo(type: String): String {
        /**
         * 订单状态
         * 1 未支付 2 已提交订单 3 商家接单  4 配送中,等待送达 5已送达 6 取消的订单
         */
        //            public static final String ORDERTYPE_UNPAYMENT = "10";
        //            public static final String ORDERTYPE_SUBMIT = "20";
        //            public static final String ORDERTYPE_RECEIVEORDER = "30";
        //            public static final String ORDERTYPE_DISTRIBUTION = "40";
        //            public static final String ORDERTYPE_SERVED = "50";
        //            public static final String ORDERTYPE_CANCELLEDORDER = "60";

        var typeInfo = ""
        when (type) {
            OrderObservable.ORDERTYPE_UNPAYMENT -> typeInfo = "未支付"
            OrderObservable.ORDERTYPE_SUBMIT -> typeInfo = "已提交订单"
            OrderObservable.ORDERTYPE_RECEIVEORDER -> typeInfo = "商家接单"
            OrderObservable.ORDERTYPE_DISTRIBUTION -> typeInfo = "配送中"
            OrderObservable.ORDERTYPE_SERVED -> typeInfo = "已送达"
            OrderObservable.ORDERTYPE_CANCELLEDORDER -> typeInfo = "取消的订单"
        }
        return typeInfo
    }
}

OrderObservable.kt订单状态被观察者

package com.example.takeout.utils

import java.util.*

/**
 * 订单状态被观察者
 */
class OrderObservable private constructor() : Observable() {
    companion object {
        val instance = OrderObservable()

        /* 订单状态
       * 1 未支付 2 已提交订单 3 商家接单  4 配送中,等待送达 5已送达 6 取消的订单*/
        val ORDERTYPE_UNPAYMENT = "10"
        val ORDERTYPE_SUBMIT = "20"
        val ORDERTYPE_RECEIVEORDER = "30"
        val ORDERTYPE_DISTRIBUTION = "40"
        // 骑手状态:接单、取餐、送餐
        val ORDERTYPE_DISTRIBUTION_RIDER_RECEIVE = "43"
        val ORDERTYPE_DISTRIBUTION_RIDER_TAKE_MEAL = "46"
        val ORDERTYPE_DISTRIBUTION_RIDER_GIVE_MEAL = "48"

        val ORDERTYPE_SERVED = "50"
        val ORDERTYPE_CANCELLEDORDER = "60"
    }

    fun newMsgComing(extras: String) {
        //从广播接受者获取到最新消息
        //通知所有观察者,新消息来了
        setChanged()
        notifyObservers(extras)
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值