app/src/main/java/cn/ptaxi/yuekeduocx/driver/base/BaseRecyclerFragment.kt
@@ -8,11 +8,16 @@ import androidx.recyclerview.widget.RecyclerView import cn.ptaxi.yuekeduocx.driver.R import cn.ptaxi.yuekeduocx.driver.netUtls.callNet import cn.sinata.xldutils.activitys.BaseActivity import cn.ptaxi.yuekeduocx.driver.utils.StatesBarUtil import cn.sinata.xldutils.activitys.BaseActivity import com.scwang.smartrefresh.layout.api.RefreshLayout import kotlinx.android.synthetic.main.fragment_base_recycler.* import java.util.* import kotlinx.android.synthetic.main.fragment_base_recycler.fl_bottom import kotlinx.android.synthetic.main.fragment_base_recycler.fl_h_top import kotlinx.android.synthetic.main.fragment_base_recycler.fl_top import kotlinx.android.synthetic.main.fragment_base_recycler.ll_nothing import kotlinx.android.synthetic.main.fragment_base_recycler.recycler_view import kotlinx.android.synthetic.main.fragment_base_recycler.smart_refresh_layout import kotlinx.android.synthetic.main.fragment_base_recycler.tv_nothing /** * Created by ts_xiaoA on 2019/9/25 09:59 @@ -35,10 +40,6 @@ override fun onActivityCreated(savedInstanceState: Bundle?) { nothingMessage = "暂无相关数据" if (topViewResId != 0) { val topBinding = LayoutInflater.from(activity).inflate(topViewResId, fl_top, true) onBindTopView(topBinding) } if (bottomViewResId != 0) { val bottomBinding = LayoutInflater.from(activity) .inflate(bottomViewResId, fl_bottom, true) @@ -88,9 +89,19 @@ } /*** * 添加一个父布局顶部View */ open fun addParentTopView(view: View, needClear: Boolean = true) { if (needClear) { fl_top.removeAllViews() } fl_top.addView(view) } /*** * 添加一个跟着滑动的顶部View */ open fun addTopView(view: View?) { open fun addListTopView(view: View?) { fl_h_top.addView(view) } @@ -134,11 +145,9 @@ protected abstract fun mapObject(): HashMap<String?, Any?>? //网络请求的map protected abstract fun mapString(): HashMap<String?, String?>? //网络请求的map protected abstract fun getDatas(t: String?): List<Item> //解析数据 //为recyclerView添加装饰、分割线 fun addItemDecoration(recyclerView: RecyclerView?) {} //获取界面上方的布局(不随recyclerView滑动) protected val topViewResId: Int = 0 //获取界面下方的布局(不随recyclerView滑动) open val bottomViewResId: Int = 0 @@ -185,12 +194,11 @@ } fun callRefresh() { val map = mapObject() map?.set("size",10) map?.set("pageNum",page) callNet(pathUrl()!!,map!!,{ map?.set("size", 10) map?.set("pageNum", page) callNet(pathUrl()!!, map!!, { if (it == null || it.isEmpty()) { return@callNet } @@ -214,7 +222,7 @@ } adapter.notifyDataSetChanged() noShowNothing() },{ }, { noShowNothing() dismissDialog() }) @@ -223,9 +231,9 @@ fun callLoadMore() { val map = mapObject() map?.set("size",pageSize) map?.set("pageNum",page) callNet(pathUrl()!!,map!!,{ map?.set("size", pageSize) map?.set("pageNum", page) callNet(pathUrl()!!, map!!, { if (it == null || it.isEmpty()) { dismissDialog() return@callNet app/src/main/java/cn/ptaxi/yuekeduocx/driver/extension/StringExtension.kt
@@ -1,5 +1,6 @@ package cn.ptaxi.yuekeduocx.driver.extension import android.icu.util.Calendar import java.text.SimpleDateFormat //扩展函数 日期字符串更改显示模板 @@ -12,4 +13,38 @@ e.printStackTrace() this } } //扩展函数 日期字符串转星期几 fun String.extDateToWeekNum(pattern: String): String { return try { SimpleDateFormat(pattern).parse(this)?.let { val calendar = Calendar.getInstance().apply { time = it } val now = Calendar.getInstance() val year = now.get(Calendar.YEAR) val month = now.get(Calendar.MONTH) val day = now.get(Calendar.DAY_OF_MONTH) if (year == calendar.get(Calendar.YEAR) && month == calendar.get(Calendar.MONTH) && day == calendar.get( Calendar.DAY_OF_MONTH ) ) { return "今天" } when (calendar.get(Calendar.DAY_OF_WEEK)) { Calendar.SUNDAY -> "周日" Calendar.MONDAY -> "周一" Calendar.TUESDAY -> "周二" Calendar.WEDNESDAY -> "周三" Calendar.THURSDAY -> "周四" Calendar.FRIDAY -> "周五" Calendar.SATURDAY -> "周六" else -> "" } } ?: this } catch (e: Exception) { e.printStackTrace() this } } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/adapter/CityRouteLineDateHeaderAdapter.kt
New file @@ -0,0 +1,45 @@ package cn.ptaxi.yuekeduocx.driver.ui.adapter import android.graphics.Color import android.view.View import cn.ptaxi.yuekeduocx.driver.R import cn.ptaxi.yuekeduocx.driver.base.BaseRvAdapter import cn.ptaxi.yuekeduocx.driver.base.BaseViewHolder import cn.ptaxi.yuekeduocx.driver.extension.extColorIdToValue import cn.ptaxi.yuekeduocx.driver.extension.extDateChangeFormat import cn.ptaxi.yuekeduocx.driver.extension.extDateToWeekNum import kotlinx.android.synthetic.main.item_city_route_line_header.view.tv_label //跨城线路日期header适配器 class CityRouteLineDateHeaderAdapter(val itemWidth: Int) : BaseRvAdapter<String>() { var choiceIndex = 0 set(value) { field = value notifyDataSetChanged() } override fun getLayoutResId(viewType: Int) = R.layout.item_city_route_line_header override fun onBindItem(holder: BaseViewHolder?, view: View?, item: String?) { holder?.also { val label = if (item.isNullOrEmpty()) "全部" else "${ item.extDateChangeFormat( "yyyy-MM-dd", "MM/dd" ) }\n${item.extDateToWeekNum("yyyy-MM-dd")}" it.itemView.tv_label.setText(label) it.itemView.tv_label.layoutParams.apply { width = itemWidth } val backgroundColor = if (choiceIndex == holder.adapterPosition) R.color.red_deep.extColorIdToValue(it.itemView.context) else Color.TRANSPARENT it.itemView.tv_label.setBackgroundColor(backgroundColor) val textColor = if (choiceIndex == holder.adapterPosition) Color.WHITE else R.color.text_gray_car.extColorIdToValue( it.itemView.context ) it.itemView.tv_label.setTextColor(textColor) } } } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/main/CityRouteLineListFragment.kt
@@ -1,7 +1,10 @@ package cn.ptaxi.yuekeduocx.driver.ui.main import android.view.View import androidx.recyclerview.widget.LinearLayoutManager import cn.ptaxi.yuekeduocx.driver.R import cn.ptaxi.yuekeduocx.driver.base.BaseRecyclerFragment import cn.ptaxi.yuekeduocx.driver.base.MyApplication import cn.ptaxi.yuekeduocx.driver.bean.CityRouteLineInfo import cn.ptaxi.yuekeduocx.driver.bean.CityRouteLineListApiResult import cn.ptaxi.yuekeduocx.driver.netUtls.Api @@ -9,13 +12,18 @@ import cn.ptaxi.yuekeduocx.driver.netUtls.getMapByAny import cn.ptaxi.yuekeduocx.driver.ui.DialogUtil import cn.ptaxi.yuekeduocx.driver.ui.adapter.CityRouteLineAdapter import cn.ptaxi.yuekeduocx.driver.ui.adapter.CityRouteLineDateHeaderAdapter import cn.ptaxi.yuekeduocx.driver.ui.to_city.ScanCityOrderActivity import cn.ptaxi.yuekeduocx.driver.ui.to_city.TripCityActivity import cn.ptaxi.yuekeduocx.driver.utils.toast import kotlinx.android.synthetic.main.layout_city_route_line_list_header.view.rv_list import org.jetbrains.anko.startActivity import java.text.SimpleDateFormat import java.util.Calendar //跨城线路列表 class CityRouteLineListFragment : BaseRecyclerFragment<CityRouteLineInfo>(CityRouteLineAdapter()) { private var date = "" override fun pathUrl(): String? { return Api.queryMyDriverShiftList @@ -23,6 +31,7 @@ override fun mapObject(): HashMap<String?, Any?>? { var map = getMapByAny() map["date"] = date return map } @@ -41,14 +50,9 @@ } override fun initView() { initHeaderLayout() (adapter as CityRouteLineAdapter).cancelListener = { item: CityRouteLineInfo -> DialogUtil.getDelAndSureDialog( context, "确定", "取消", "您确定取消行程吗?", { }) { DialogUtil.getDelAndSureDialog(context, "确定", "取消", "您确定取消行程吗?", {}) { if (item.orderId?.isNotEmpty() == true) { toast("班次已使用不允许取消") } else { @@ -68,12 +72,41 @@ (adapter as CityRouteLineAdapter).startListener = { item: CityRouteLineInfo -> if (item.orderId?.isNotEmpty() == true) { context.startActivity<TripCityActivity>( "orderId" to item.orderId.toString(), "orderType" to item.orderType.toString() "orderId" to item.orderId.toString(), "orderType" to item.orderType.toString() ) } else { toast("暂无订单") } } } //初始化header布局 private fun initHeaderLayout() { val dateHeaderLayout = layoutInflater.inflate(R.layout.layout_city_route_line_list_header, null) val dateAdapter = CityRouteLineDateHeaderAdapter(MyApplication.getInstance().resources.displayMetrics.widthPixels / 5) dateHeaderLayout.rv_list.adapter = dateAdapter dateHeaderLayout.rv_list.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) addParentTopView(dateHeaderLayout) dateAdapter.data.clear() val calendar = Calendar.getInstance() val format = SimpleDateFormat("yyyy-MM-dd") val today = format.format(calendar.time) calendar.add(Calendar.DAY_OF_YEAR, 1) val nextDay = format.format(calendar.time) calendar.add(Calendar.DAY_OF_YEAR, 1) val nextDay2 = format.format(calendar.time) calendar.add(Calendar.DAY_OF_YEAR, 1) val nextDay3 = format.format(calendar.time) val list = listOf("", today, nextDay, nextDay2, nextDay3) dateAdapter.data.addAll(list) dateAdapter.setOnItemClickListener { _, position -> date = list[position] dateAdapter.choiceIndex = position autoRefresh() } dateAdapter.notifyDataSetChanged() } } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/main/event/EventDetailFragment.kt
@@ -50,7 +50,7 @@ if (!time.isNullOrEmpty()) { var view = createView(R.layout.item_time, context) view.tv_time.text = time addTopView(view) addListTopView(view) } } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/main/event/MineEventFragment.kt
@@ -51,7 +51,7 @@ if (!time.isNullOrEmpty()) { var view = createView(R.layout.item_time, context) view.tv_time.text = time addTopView(view) addListTopView(view) } } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/mine/CommendInfoListFragment.kt
@@ -44,7 +44,7 @@ var param = tv_nothing.layoutParams as LinearLayout.LayoutParams param.topMargin = dp2px(66f) var view= layoutInflater.inflate(R.layout.item_commend_info_top,null) addTopView(view) addListTopView(view) view.tv_mine_commend.clickDelay { (adapter as CommendInfoListAdapter).type = 1 type = 1 app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/mine/MineEvalFragment.kt
@@ -44,7 +44,7 @@ override fun init() { super.init() var view = LayoutInflater.from(context).inflate(R.layout.item_top_mine_eval,null) addTopView(view) addListTopView(view) tv_start_num.text = getFormatOne(score.toDoubleOrNull()) } app/src/main/java/cn/ptaxi/yuekeduocx/driver/ui/to_city/TripCityActivity.kt
@@ -315,8 +315,8 @@ if (it.orderState == 5) { changeTopOrder() } if (it.orderState == 3 || it.orderState == 5) iv_to_gd.callOnClick() // if (it.orderState == 3 || it.orderState == 5) // iv_to_gd.callOnClick() }) { it.orderState-- } @@ -324,32 +324,32 @@ } 4 -> { if (orderBean.data?.isSelfCityRouteLine != true) { //手机后4位数字 val phoneLast4Number = it.realPhone.substring(it.realPhone.length - 4) DialogUtil.getInputNumberDialog( this, phoneLast4Number.substring(0, 2), 4, ) { value -> if (value != phoneLast4Number) { toast("手机号错误") return@getInputNumberDialog } it.orderState++ callStatue(it.orderState, { tripItemAdapter.notifyDataSetChanged() showStatueMapUI(it) if (it.orderState == 5) { changeTopOrder() } if (it.orderState == 3 || it.orderState == 5) iv_to_gd.callOnClick() }) { it.orderState-- } } } else { // if (orderBean.data?.isSelfCityRouteLine != true) { // //手机后4位数字 // val phoneLast4Number = // it.realPhone.substring(it.realPhone.length - 4) // DialogUtil.getInputNumberDialog( // this, // phoneLast4Number.substring(0, 2), 4, // ) { value -> // if (value != phoneLast4Number) { // toast("手机号错误") // return@getInputNumberDialog // } // it.orderState++ // callStatue(it.orderState, { // tripItemAdapter.notifyDataSetChanged() // showStatueMapUI(it) // if (it.orderState == 5) { // changeTopOrder() // } // if (it.orderState == 3 || it.orderState == 5) // iv_to_gd.callOnClick() // }) { // it.orderState-- // } // } // } else { it.orderState++ callStatue(it.orderState, { tripItemAdapter.notifyDataSetChanged() @@ -357,12 +357,12 @@ if (it.orderState == 5) { changeTopOrder() } if (it.orderState == 3 || it.orderState == 5) iv_to_gd.callOnClick() // if (it.orderState == 3 || it.orderState == 5) // iv_to_gd.callOnClick() }) { it.orderState-- } } // } return@showChangeStateNoticeDialog } app/src/main/res/layout/item_city_route_line_header.xml
New file @@ -0,0 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="wrap_content" android:layout_height="match_parent"> <TextView android:id="@+id/tv_label" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:lineSpacingMultiplier="1.05" android:textColor="@color/text_gray_car" android:textSize="12sp" tools:text="2/19\n今天" /> </FrameLayout> app/src/main/res/layout/layout_city_route_line_list_header.xml
New file @@ -0,0 +1,16 @@ <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_list" android:layout_width="match_parent" android:layout_height="50dp" android:layout_marginBottom="1dp" android:background="@color/white" tools:itemCount="3" tools:layoutManager="linear" tools:listitem="@layout/item_city_route_line_header" /> </FrameLayout>