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)
}
}