Browse Source

fix 修复fragment构造函数传参报错的问题

robin 4 years ago
parent
commit
3aa52d0633

+ 2 - 1
app/src/main/java/com/doverfuelingsolutions/issp/api/dto/ResultPayment.kt

@@ -1,6 +1,7 @@
 package com.doverfuelingsolutions.issp.api.dto
 
 import com.wayne.www.waynelib.webservice.entity.PosTrxItem
+import java.io.Serializable
 
 data class ResultPayment(
     val Id: String,
@@ -43,5 +44,5 @@ data class ResultPayment(
         val TransactionSource: Int,
         val TransactionStatus: Int,
         val TransactionType: Int,
-    )
+    ) : Serializable
 }

+ 6 - 9
app/src/main/java/com/doverfuelingsolutions/issp/view/MainActivity.kt

@@ -126,6 +126,8 @@ class MainActivity : AppCompatActivity(),
                             dialog.dismiss()
                             if (result.success) {
                                 DFSToastUtil.success(R.string.get_fuel_success)
+                                initFragmentEntry()
+                                return@let
                             } else {
                                 DFSToastUtil.fail(R.string.get_fuel_failed)
                                 onFusionStatus(FusionStatus.ConnectedWithoutInfo)
@@ -195,10 +197,7 @@ class MainActivity : AppCompatActivity(),
                 FusionStatus.ConnectedWithoutInfo -> {
                     DFSToastUtil.fail(R.string.get_fuel_failed)
                     fragmentRouter.popBottom()
-                    fragmentRouter.replace(FragmentReconnect.build {
-                        DFSToastUtil.success(R.string.get_fuel_success)
-                        initFragmentEntry()
-                    })
+                    fragmentRouter.replace(FragmentReconnect.build())
                 }
                 FusionStatus.Disconnected -> {
                     // Disconnected reason
@@ -206,9 +205,7 @@ class MainActivity : AppCompatActivity(),
                     // 2. Communication exception and failed retry.
                     DFSToastUtil.fail(R.string.disconnect_fusion)
                     fragmentRouter.popBottom()
-                    fragmentRouter.replace(FragmentReconnect.build {
-                        setFusionLinkingLoading()
-                    })
+                    fragmentRouter.replace(FragmentReconnect.build())
                 }
             }
         }
@@ -254,7 +251,7 @@ class MainActivity : AppCompatActivity(),
         }
     }
 
-    private fun setFusionLinkingLoading() {
+    fun setFusionLinkingLoading() {
         // Don't dismiss dialog, just show & hide for reuse.
         dialogFusionLinking?.dismiss()
         dialogFusionLinking = LoadingDialogBuilder(this@MainActivity)
@@ -265,7 +262,7 @@ class MainActivity : AppCompatActivity(),
         dialogFusionLinking?.window?.let { WindowUtil.setFullscreen(it) }
     }
 
-    private fun initFragmentEntry() {
+    fun initFragmentEntry() {
         fragmentRouter.setHomeFragment(
             if (SPUtil.getString(SPKeys.ORDER_CHOOSE) == "nozzle") {
                 FragmentNozzle.build()

+ 14 - 3
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentOrderList.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.os.bundleOf
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
@@ -14,6 +15,7 @@ import com.doverfuelingsolutions.issp.databinding.FragmentNozzleOrdersBinding
 import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
 import com.doverfuelingsolutions.issp.utils.StringUtil
+import com.doverfuelingsolutions.issp.utils.log.DFSLog
 import com.doverfuelingsolutions.issp.utils.sp.SPUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.adapter.ChooseListAdapter
@@ -21,12 +23,18 @@ import com.doverfuelingsolutions.issp.view.adapter.OrderListAdapter
 import com.scwang.smart.refresh.header.ClassicsHeader
 import com.wayne.www.waynelib.fdc.message.DeviceClass
 
-class FragmentOrderList private constructor(private val pumpId: Int) : FragmentBasic() {
+class FragmentOrderList private constructor() : FragmentBasic() {
 
     companion object {
-        fun build(pumpId: Int) = FragmentOrderList(pumpId)
+        fun build(pumpId: Int): FragmentOrderList {
+            return FragmentOrderList().apply {
+                arguments = bundleOf(Pair("pumpId", pumpId))
+            }
+        }
     }
 
+    private var pumpId: Int = -1
+
     override val title = StringUtil.get(R.string.select_pay_order)
     override val countdownTime: Int = 80
 
@@ -38,7 +46,9 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
 
     private val orderList = arrayListOf<DeviceClass>()
     private val orderListAfterFilter = arrayListOf<DeviceClass>()
-    private val orderListAdapter = OrderListAdapter(if (pumpId != -1) orderList else orderListAfterFilter, this::selectOrder)
+    private val orderListAdapter: OrderListAdapter by lazy {
+        OrderListAdapter(if (pumpId != -1) orderList else orderListAfterFilter, this::selectOrder)
+    }
     private var selectedPosition: Int? = null
 
     private var selectedName = ""
@@ -48,6 +58,7 @@ class FragmentOrderList private constructor(private val pumpId: Int) : FragmentB
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        pumpId = arguments?.getInt("pumpId") ?: -1
         loadListData()
     }
 

+ 24 - 5
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayResult.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.os.bundleOf
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
@@ -16,21 +17,29 @@ import com.doverfuelingsolutions.issp.utils.DFSToastUtil
 import com.doverfuelingsolutions.issp.utils.StringUtil
 import com.doverfuelingsolutions.issp.view.MainActivity
 import com.wayne.www.waynelib.fdc.message.DeviceClass
+import com.wayne.www.waynelib.webservice.entity.PosTrx
 import kotlinx.android.synthetic.main.widget_fragment_toolbar.*
 import kotlinx.coroutines.launch
 
 /**
  * 支付结果页面(目前只有成功才会显示该页面)
  */
-class FragmentPayResult private constructor(
-    private val dc: DeviceClass,
-    private val posTrxBean: ResultPayment.PosTrxBean
-) : FragmentBasic(), View.OnClickListener {
+class FragmentPayResult private constructor() : FragmentBasic(), View.OnClickListener {
 
     companion object {
-        fun build(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean) = FragmentPayResult(dc, posTrxBean)
+        fun build(dc: DeviceClass, posTrxBean: ResultPayment.PosTrxBean): FragmentPayResult {
+            return FragmentPayResult().apply {
+                arguments = bundleOf(
+                    Pair("dc", dc),
+                    Pair("posTrxBean", posTrxBean),
+                )
+            }
+        }
     }
 
+    private lateinit var dc: DeviceClass
+    private lateinit var posTrxBean: ResultPayment.PosTrxBean
+
     override val title: String = StringUtil.get(R.string.pay_success)
     override val showButtonBack: Boolean = false
 
@@ -42,6 +51,16 @@ class FragmentPayResult private constructor(
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        val sDC = arguments?.getSerializable("dc")
+        val sPos = arguments?.getSerializable("posTrxBean")
+        if (sDC is DeviceClass && sPos is ResultPayment.PosTrxBean) {
+            dc = sDC
+            posTrxBean = sPos
+        } else {
+            DFSToastUtil.fail("no DeviceClass or posTrxBean")
+            (requireActivity() as MainActivity).fragmentRouter.popBottom()
+        }
+
         lifecycle.addObserver(printManager)
         (activity as MainActivity).blockBackPress(true)
     }

+ 23 - 2
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayScanCode.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.os.bundleOf
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.ViewModel
@@ -23,12 +24,22 @@ import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.GlobalScope
 import kotlinx.coroutines.launch
 
-class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTrx) : FragmentBasic() {
+class FragmentPayScanCode private constructor() : FragmentBasic() {
 
     companion object {
-        fun build(dc: DeviceClass, posTrx: PosTrx) = FragmentPayScanCode(dc, posTrx)
+        fun build(dc: DeviceClass, posTrx: PosTrx): FragmentPayScanCode {
+            return FragmentPayScanCode().apply {
+                arguments = bundleOf(
+                    Pair("dc", dc),
+                    Pair("posTrx", posTrx),
+                )
+            }
+        }
     }
 
+    private lateinit var dc: DeviceClass
+    private lateinit var posTrx: PosTrx
+
     override val title = StringUtil.get(R.string.pay_by_qr)
     override val countdownTime: Int = -1
 
@@ -40,6 +51,16 @@ class FragmentPayScanCode(private val dc: DeviceClass, private val posTrx: PosTr
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
 
+        val sDC = arguments?.getSerializable("dc")
+        val sPos = arguments?.getSerializable("posTrx")
+        if (sDC is DeviceClass && sPos is PosTrx) {
+            dc = sDC
+            posTrx = sPos
+        } else {
+            DFSToastUtil.fail("no DeviceClass or PosTrx")
+            (requireActivity() as MainActivity).fragmentRouter.pop()
+        }
+
         lifecycleScope.launchWhenCreated { scanCodeManager.create() }
     }
 

+ 24 - 3
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentPayType.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import androidx.core.os.bundleOf
 import androidx.databinding.DataBindingUtil
 import androidx.lifecycle.lifecycleScope
 import com.doverfuelingsolutions.issp.R
@@ -21,15 +22,35 @@ import com.wayne.www.waynelib.fdc.message.DeviceClass
 import com.wayne.www.waynelib.webservice.entity.PosTrx
 import java.math.BigDecimal
 
-class FragmentPayType private constructor(private val dc: DeviceClass): FragmentBasic(), View.OnClickListener {
+class FragmentPayType private constructor(): FragmentBasic(), View.OnClickListener {
 
     companion object {
-        fun build(dc: DeviceClass) = FragmentPayType(dc)
+        fun build(dc: DeviceClass): FragmentPayType {
+            return FragmentPayType().apply {
+                arguments = bundleOf(
+                    Pair("dc", dc)
+                )
+            }
+        }
     }
 
-    override val title = StringUtil.get(R.string.select_pay_type)
+    private lateinit var dc: DeviceClass
 
     private lateinit var binding: FragmentPayTypeBinding
+    override val title = StringUtil.get(R.string.select_pay_type)
+
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+
+        val data = arguments?.getSerializable("dc")
+        if (data is DeviceClass) {
+            dc = data
+        } else {
+            DFSToastUtil.fail("no DeviceClass")
+            (requireActivity() as MainActivity).fragmentRouter.pop()
+        }
+    }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
         if (!this::binding.isInitialized) {

+ 7 - 7
app/src/main/java/com/doverfuelingsolutions/issp/view/fragment/FragmentReconnect.kt

@@ -10,17 +10,16 @@ import com.doverfuelingsolutions.issp.R
 import com.doverfuelingsolutions.issp.databinding.FragmentReconnectBinding
 import com.doverfuelingsolutions.issp.fusion.FusionManager
 import com.doverfuelingsolutions.issp.utils.DFSToastUtil
+import com.doverfuelingsolutions.issp.view.MainActivity
 import com.doverfuelingsolutions.issp.view.PreferenceActivity
 import com.wayne.www.waynelib.fdc.FdcClient
 
-class FragmentReconnect private constructor(
-    private val handler: () -> Unit,
-) : FragmentBasic(), View.OnClickListener {
+class FragmentReconnect private constructor() : FragmentBasic(), View.OnClickListener {
 
     companion object {
 
-        fun build(handler: () -> Unit): FragmentReconnect {
-            return FragmentReconnect(handler)
+        fun build(): FragmentReconnect {
+            return FragmentReconnect()
         }
     }
 
@@ -51,13 +50,14 @@ class FragmentReconnect private constructor(
         when (v) {
             binding.buttonReconnect -> {
                 FusionManager.restart(true)
-                handler.invoke()
+                (requireActivity() as MainActivity).setFusionLinkingLoading()
             }
             binding.buttonFetchInfo -> {
                 lifecycleScope.launchWhenStarted {
                     val dialog = loading(R.string.in_get_fuel)
                     if (checkFusion()) {
-                        handler.invoke()
+                        DFSToastUtil.success(R.string.get_fuel_success)
+                        (requireActivity() as MainActivity).initFragmentEntry()
                     } else {
                         DFSToastUtil.fail(R.string.get_fuel_failed)
                     }