瀏覽代碼

1、统一详情界面;
2、持仓单详情界面。

ProGo 4 年之前
父節點
當前提交
fb9b8f7b9f

+ 0 - 12
RMA/app/src/main/java/cn/muchinfo/rma/business/future/FutureManager.kt

@@ -150,22 +150,10 @@ class FutureManager {
             goodsIDs.add(goodsInfoAndQuote.goodsInfo.goodsid)
 
             try {
-//                val date = goodsQuoteTik["date"]
-//                val time = goodsQuoteTik["time"]
-//                val quoteTime = SimpleDateFormat("yyyyMMddHHmmss").parse("$date$time")
-//                    .guard { return@continuing }
-//                if (goodsInfoAndQuote.quoteDayData.lasttime.isEmpty()) {
-//                    // 实时行情需要判断行情时间是否比盘面的时间要早,如果要早则抛弃
-//                    if (quoteTime.before(SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(goodsInfoAndQuote.quoteDayData.lasttime))) {
-//                        return@continuing
-//                    }
-//                }
-
                 // 反射赋值
                 val c = Class.forName("cn.muchinfo.rma.global.data.QuoteDayData")
                 c.declaredFields.forEach {
                     if (goodsQuoteTik.containsKey(it.name)) {
-                        LogUtils.eTag("RMA11", it.name, it.type)
                         when (it.type.toString()) {
                             "double" -> {
                                 it.isAccessible = true

+ 9 - 5
RMA/app/src/main/java/cn/muchinfo/rma/global/GlobalDataCollection.kt

@@ -57,20 +57,24 @@ class GlobalDataCollection : BaseGlobalData() {
     val accountData: AccountData?
         get() {
             var accountData: AccountData? = null
-            if (instance?.getAccountDataList() == null) {
+            if (accountDataList == null) {
                 accountData = AccountData()
             } else {
                 if (SPUtils.getInstance().getLong(Constant.SELECT_ACCOUNT_ID, 0) == 0L) {
                     accountData = instance!!.accountDataList[0]
                 } else {
-                    for (i in instance!!.getAccountDataList().indices) {
-                        if (instance!!.accountDataList[i].accountid == SPUtils.getInstance().getLong(Constant.SELECT_ACCOUNT_ID)
-                                .toLong()
+                    for (i in accountDataList.indices) {
+                        if (accountDataList[i].accountid == SPUtils.getInstance().getLong(Constant.SELECT_ACCOUNT_ID)
                         ) {
-                            accountData = instance!!.accountDataList[i]
+                            accountData = accountDataList[i]
                         }
                     }
                 }
+                // 还是没找到,就去第一个
+                if (accountData == null) {
+                    accountData = accountDataList[0]
+                    SPUtils.getInstance().put(Constant.SELECT_ACCOUNT_ID, accountData.accountid)
+                }
             }
             return accountData
         }

+ 2 - 4
RMA/app/src/main/java/cn/muchinfo/rma/global/StringUtils.kt

@@ -1,6 +1,5 @@
 package cn.muchinfo.rma.global
 
-import cn.muchinfo.rma.global.data.futureOrders.FutureEntrustData
 import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import com.blankj.utilcode.util.TimeUtils
 import java.text.SimpleDateFormat
@@ -44,8 +43,7 @@ fun String.toPercentage() : String{
     if (this.isEmpty()){
         return "--"
     }
-    val percentage = NumberUtils.roundNum(this.toDouble().times(100),2) + "%"
-    return percentage
+    return NumberUtils.roundNum(toDouble().times(100),2) + "%"
 }
 
 /**
@@ -69,7 +67,7 @@ fun String.toShowTime() : String{
     }
     val sdf = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss+08:00", Locale.CHINA)
     val sdf1 = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA)
-    return sdf1.format(sdf.parse(this))
+    return sdf1.format(sdf.parse(this)!!)
 }
 
 /**

+ 50 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/FutureFragment.kt

@@ -1,5 +1,6 @@
 package cn.muchinfo.rma.view.base.future
 
+import android.annotation.SuppressLint
 import android.os.Bundle
 import android.view.LayoutInflater
 import android.view.View
@@ -7,23 +8,32 @@ import android.view.ViewGroup
 import android.widget.TextView
 import androidx.annotation.NonNull
 import androidx.annotation.Nullable
+import androidx.appcompat.app.AppCompatActivity
 import androidx.core.view.marginTop
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.FragmentPagerAdapter
 import androidx.lifecycle.MutableLiveData
 import androidx.viewpager.widget.ViewPager
 import cn.muchinfo.rma.R
+import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.lifecycle.bindOptional
 import cn.muchinfo.rma.view.MyApplication
 import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
+import cn.muchinfo.rma.view.autoWidget.HeadView
 import cn.muchinfo.rma.view.base.BaseFragment
 import cn.muchinfo.rma.view.base.future.costs.CostFragment
 import cn.muchinfo.rma.view.base.future.deals.DealFragment
 import cn.muchinfo.rma.view.base.future.entrusts.EntrustFragment
 import cn.muchinfo.rma.view.base.future.holds.HoldFragment
 import cn.muchinfo.rma.view.base.future.markets.FutureMarket
+import cn.muchinfo.rma.view.eventbus.EventConstent
+import cn.muchinfo.rma.view.eventbus.MessageEvent
 import com.blankj.utilcode.util.ToastUtils
 import com.qmuiteam.qmui.widget.tab.QMUITabSegment
+import mtp.polymer.com.autowidget.dialog.creatSelectAccountDialog
+import org.greenrobot.eventbus.EventBus
+import org.greenrobot.eventbus.Subscribe
+import org.greenrobot.eventbus.ThreadMode
 import org.jetbrains.anko._LinearLayout
 import org.jetbrains.anko.support.v4.UI
 import java.util.zip.Inflater
@@ -41,7 +51,9 @@ class FutureFragment : BaseFragment<FutureViewModel>() {
     private var idPager: ViewPager? = null
     private var id_title : TextView? = null
     private var id_account : TextView? = null
+    private var idHead: HeadView ? = null
     val selectIndex : MutableLiveData<Int> = MutableLiveData()
+    private var idAccountInfo: TextView? = null
     // tab 值
     private val tabs: Array<String?> = arrayOf(
         MyApplication.getInstance()?.resources?.getString(R.string.str_markets), // 行情
@@ -71,8 +83,13 @@ class FutureFragment : BaseFragment<FutureViewModel>() {
     }
 
     private fun initViews() {
+
         idTab = _view?.findViewById(R.id.id_tab)
         idPager = _view?.findViewById(R.id.id_pager)
+        idHead = _view?.findViewById(R.id.id_head)
+
+        setHeadView()
+
         // 设置
         val builder = BaseFutureModel().qmuiTabSegmentConfig(idTab, 15, context)
         idTab?.mode = QMUITabSegment.MODE_FIXED
@@ -130,4 +147,37 @@ class FutureFragment : BaseFragment<FutureViewModel>() {
         })
     }
 
+    private fun setHeadView() {
+        val view = getHeadView()
+        idHead?.setTitleView(view!!)
+    }
+
+    /**
+     * 头部的view
+     */
+    @SuppressLint("InflateParams", "SetTextI18n")
+    fun getHeadView(): View? {
+        val headView = LayoutInflater.from(context).inflate(R.layout.future_head_view, null, false)
+        idAccountInfo = headView?.findViewById(R.id.id_account_info)
+
+        headView.setOnClickListener {
+            (context as AppCompatActivity).creatSelectAccountDialog {
+                EventBus.getDefault()
+                    .post(MessageEvent(EventConstent.USERACCOUNTCHANGE))
+            }.show()
+        }
+        viewModel.usedAccountData.bindOptional(context!!) {
+            idAccountInfo?.text = viewModel.getAccountInfo(it)
+        }
+        idAccountInfo?.text = viewModel.getAccountInfo(GlobalDataCollection.instance?.accountData)
+        return headView
+    }
+
+    //通用的消息更新通知
+    @Subscribe(threadMode = ThreadMode.MAIN)
+    fun onMessageEvent(messageEvent : MessageEvent) {
+        if (messageEvent.messageType == EventConstent.USERACCOUNTCHANGE){//接到通知更新当前的资金账号
+            viewModel.initAccountData()
+        }
+    }
 }

+ 20 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/FutureViewModel.kt

@@ -1,7 +1,27 @@
 package cn.muchinfo.rma.view.base.future
 
+import androidx.lifecycle.MutableLiveData
+import cn.muchinfo.rma.global.GlobalDataCollection
+import cn.muchinfo.rma.global.data.AccountData
 import cn.muchinfo.rma.view.base.BaseViewModel
 
 class FutureViewModel : BaseViewModel() {
+    /**
+     * 使用的当前的资金账户信息
+     */
+    val usedAccountData : MutableLiveData<AccountData> = MutableLiveData()
 
+    /**
+     * 更新交易下单的account
+     */
+    fun initAccountData(){
+        val accountDataList = GlobalDataCollection.instance?.accountDataList
+        if (accountDataList.isNullOrEmpty().not()){
+            usedAccountData.postValue(GlobalDataCollection.instance?.accountData)
+        }
+    }
+
+    fun getAccountInfo(accountInfo: AccountData?): String {
+        return accountInfo?.accountname + "(" + accountInfo?.accountid + ")"
+    }
 }

+ 1 - 1
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/costs/CostInfoFragment.kt

@@ -299,7 +299,7 @@ class CostInfoFragment(type: String?) : BaseFragment<CostViewModel>() {
                                userAccountData.bindOptional(context){
                                    val canuse = accountData?.currentbalance?.minus(accountData?.usedmargin ?: 0.0)?.minus(accountData?.freezecharge ?: 0.0)?.minus(accountData?.freezemargin ?: 0.0)?.minus(accountData?.otherfreezemargin ?: 0.0)
                                    val all = accountData?.currentbalance?.plus(it?.keep_watch_profit_and_loss?.toDouble() ?: 0.0)
-                                   text = canuse?.div(all ?: 1.0).toString().toPercentage()
+                                   text = (canuse?.div(all ?: 1.0) ?: "").toString().toPercentage()
                                 }
                                 textSizeAuto = 31
                                 textColorInt = R.color.rma_black_33

+ 1 - 3
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/costs/CostViewModel.kt

@@ -12,17 +12,15 @@ import androidx.recyclerview.widget.RecyclerView
 import cn.muchinfo.rma.R
 import cn.muchinfo.rma.global.GlobalDataCollection
 import cn.muchinfo.rma.global.data.AmountLogData
-import cn.muchinfo.rma.global.data.futureOrders.DealOrderData
 import cn.muchinfo.rma.global.isBlankNumber
 import cn.muchinfo.rma.global.toShowTime
 import cn.muchinfo.rma.view.MyApplication
-import cn.muchinfo.rma.view.autoWidget.DetailItem
 import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.base.BaseViewModel
 import com.blankj.utilcode.util.ActivityUtils
 
 class CostViewModel : BaseViewModel() {
-    private var costInfoList: ArrayList<CostInfoData>? = ArrayList() // 资金信息
+    private var orderDetailList: ArrayList<OrderDetailData>? = ArrayList() // 资金信息
 //    var costList: ArrayList<CostListData>? = ArrayList() // 资金流水
 
     /**

+ 37 - 2
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/costs/CostInfoData.kt → RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/costs/OrderDetailData.kt

@@ -1,8 +1,9 @@
 package cn.muchinfo.rma.view.base.future.costs
 
-import java.io.Serializable
+import android.os.Parcel
+import android.os.Parcelable
 
-class CostInfoData : Serializable {
+class OrderDetailData() : Parcelable {
     private var leftText: String? = null
     private var rightText: String? = null
     private var leftStyle: Int = 0
@@ -10,6 +11,17 @@ class CostInfoData : Serializable {
     private var rightTextPadding: Int = 0
     private var leftTextPadding: Int = 0
 
+    constructor(parcel: Parcel) : this() {
+        leftText = parcel.readString()
+        rightText = parcel.readString()
+        leftStyle = parcel.readInt()
+        rightStyle = parcel.readInt()
+        rightTextPadding = parcel.readInt()
+        leftTextPadding = parcel.readInt()
+    }
+
+
+
     fun getLeftText() : String {
         return leftText!!
     }
@@ -47,4 +59,27 @@ class CostInfoData : Serializable {
     fun setLeftTextPadding(leftTextPadding: Int) {
         this.leftTextPadding = leftTextPadding
     }
+
+    override fun writeToParcel(parcel: Parcel, flags: Int) {
+        parcel.writeString(leftText)
+        parcel.writeString(rightText)
+        parcel.writeInt(leftStyle)
+        parcel.writeInt(rightStyle)
+        parcel.writeInt(rightTextPadding)
+        parcel.writeInt(leftTextPadding)
+    }
+
+    override fun describeContents(): Int {
+        return 0
+    }
+
+    companion object CREATOR : Parcelable.Creator<OrderDetailData> {
+        override fun createFromParcel(parcel: Parcel): OrderDetailData {
+            return OrderDetailData(parcel)
+        }
+
+        override fun newArray(size: Int): Array<OrderDetailData?> {
+            return arrayOfNulls(size)
+        }
+    }
 }

+ 73 - 31
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/holds/HoldViewModel.kt

@@ -19,6 +19,8 @@ import cn.muchinfo.rma.view.autoWidget.onThrottleFirstClick
 import cn.muchinfo.rma.view.autoWidget.utils.NumberUtils
 import cn.muchinfo.rma.view.base.BaseViewModel
 import cn.muchinfo.rma.view.base.app.FutureConstent
+import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
+import cn.muchinfo.rma.view.base.future.orderDeatails.OrderDetail
 import cn.muchinfo.rma.view.eventbus.EventConstent
 import cn.muchinfo.rma.view.eventbus.TradeMessageEvent
 import com.blankj.utilcode.util.TimeUtils
@@ -40,6 +42,66 @@ class HoldViewModel : BaseViewModel() {
     var futureHoldData: FutureHoldData? = null // 当前选择的item对应的数据
 
     /**
+     * 组装数据
+     */
+    fun makeCostInfo(data: FutureHoldData): ArrayList<OrderDetailData>? {
+        val orderDetailList: ArrayList<OrderDetailData>? = ArrayList()
+        val paddingLeft = 350 // 右侧的文字,距离左侧的距离
+        val leftTextPadding = 0 // 左侧的文字,距离左侧的距离
+
+        var m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_unit_name))
+        m.setRightText(data.goodsname)
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_order_all_num))
+        m.setRightText(data.curpositionqty.toString() + "/" + data.curpositionqty)
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_order_all_available))
+        m.setRightText(data.enableqty.toString() + "" + data.curpositionqty)
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_ava_price))
+        m.setRightText(data.positionaverageprice.toString())
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_hold_pl))
+        m.setRightText(data.positionpl.toString())
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_use_amount))
+        m.setRightText(data.usedmargin.toString())
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        m = OrderDetailData()
+        m.setLeftText(context?.getString(R.string.str_exchange))
+        m.setRightText(data.exexchangename)
+        m.setRightTextPadding(paddingLeft)
+        m.setLeftTextPadding(leftTextPadding)
+        orderDetailList?.add(m)
+
+        return orderDetailList
+    }
+
+    /**
      * 获取配置器。
      */
     fun getAdapter(fragment : Fragment): RecyclerView.Adapter<HoldAdapter.HoldHolder> {
@@ -49,7 +111,7 @@ class HoldViewModel : BaseViewModel() {
     /**
      * 通用的适配器。
      */
-    class HoldAdapter(context: Context?,fragment : Fragment) : RecyclerView.Adapter<HoldAdapter.HoldHolder>() {
+    inner class HoldAdapter(context: Context?,fragment : Fragment) : RecyclerView.Adapter<HoldAdapter.HoldHolder>() {
         private var list: ArrayList<FutureHoldData>? = null
         private var inflater: LayoutInflater? = null
         private var context: Context? = null
@@ -204,8 +266,14 @@ class HoldViewModel : BaseViewModel() {
             }
 
             /** 详情 **/
+            holder.id_entrust_detail?.tag = itemData
             holder.id_entrust_detail?.onThrottleFirstClick {
-
+                val tagData = it?.tag as FutureHoldData
+                val data = makeCostInfo(tagData)
+                OrderDetail.start(
+                    context!!,
+                    data,
+                    context?.resources?.getString(R.string.str_order_detail_head))
             }
 
             if (list?.get(position)?.selected == true) {
@@ -314,14 +382,6 @@ class HoldViewModel : BaseViewModel() {
             if (goodsQuote?.quoteDayData != null) {
                 val decial = goodsQuote.goodsInfo.decimalplace
                 val setp: Double
-//                setp = if ("0" == overDot) { //如果没有拿到超价点数则按照原来的计算吧
-//
-//                } else {
-//                    goodsInfo.getGoodsInfo().getQuoteMinUnit() * Math.pow(
-//                        10.0,
-//                        -goodsInfo.getGoodsInfo().getDecimalPlace()
-//                    ) * java.lang.Double.valueOf(overDot)
-//                }
                 setp = goodsQuote.goodsInfo.quoteminunit * Math.pow(
                     10.0,
                     -decial.toDouble()
@@ -350,30 +410,9 @@ class HoldViewModel : BaseViewModel() {
                 datas.channelBuildType = FutureConstent.eChannelBuildType_OPEN // 下单类型  建仓还是平仓
             }
             datas.priceMode = FutureConstent.PriceMode_PRICEMODE_LIMIT // 限价
-//            datas.setCloseTodayQty(amountInputEdittext.text.toString().toLong())
-//        if (goodsInfo.getInnerDealMode() === 3) {
-//            if (mTradeSummaryData != null) {
-//                val todayAvailQty: String =
-//                    java.lang.String.valueOf(mTradeSummaryData.getTodayAvailQty())
-//                if (mTradeSummaryData.getTodayAvailQty() > 0) { //
-//                    if (mTradeSummaryData.getTodayAvailQty() > tradeNum) { // 如果平今的大于输入的数量,那就不要使用平今数量,直接赋值tradeNum给CloseTodayQty
-//                        datas.setCloseTodayQty(java.lang.Double.valueOf(tradeNum).toLong())
-//                    } else {
-//                        datas.setCloseTodayQty(
-//                            java.lang.Double.valueOf(todayAvailQty.trim { it <= ' ' }).toLong()
-//                        )
-//                    }
-//                } else {
-//                    datas.setCloseTodayQty(0)
-//                }
-//            }
-//        }
             datas.setTimeValidType(FutureConstent.ValidTypeEnum_VALIDTYPE_DR) // 时间有效类型   默认写死当日有效
             datas.setRelatedID(0) // 关联单号 默认写死
             datas.setServiceTime("") //服务端时间string
-            //        datas.setIp(PolApplication.getIPAddress(getContext()));B
-//        val bbb: String = Utils.getCommonIp()
-//        datas.setIp(bbb)
             datas.setValidtime("") // 有效时间string
 
             GlobalScope.launch {
@@ -416,4 +455,7 @@ class HoldViewModel : BaseViewModel() {
             }
         }
     }
+
+
+
 }

+ 47 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/orderDeatails/OrderDetail.kt

@@ -0,0 +1,47 @@
+package cn.muchinfo.rma.view.base.future.orderDeatails
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import cn.muchinfo.rma.R
+import cn.muchinfo.rma.view.base.BaseActivity
+import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
+import kotlinx.android.synthetic.main.order_detail.*
+
+/**
+ * 单据详情页面
+ */
+class OrderDetail() : BaseActivity<OrderDetailModel>() {
+
+    var data: ArrayList<OrderDetailData>? = null
+    var titleName: String? = ""
+
+    companion object {
+        fun start(context: Context, data: ArrayList<OrderDetailData>?, titleName: String?) {
+            val intent = Intent(context, OrderDetail::class.java)
+            intent.putExtra("data", data)
+            intent.putExtra("title_name", titleName)
+            context.startActivity(intent)
+        }
+    }
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.order_detail)
+        if (intent != null) {
+            viewModel.orderDetailList = intent.getParcelableArrayListExtra<OrderDetailData>("data")
+            titleName = intent.getStringExtra("title_name") ?: resources.getString(R.string.details)
+        }
+        initViews()
+    }
+
+    private fun initViews() {
+        id_head.setTitle(titleName!!)
+
+        val layoutManager = LinearLayoutManager(this@OrderDetail)
+        id_order_detail_list?.layoutManager = layoutManager
+        id_order_detail_list?.adapter = viewModel.getCostInfoAdapter()
+    }
+}

+ 65 - 0
RMA/app/src/main/java/cn/muchinfo/rma/view/base/future/orderDeatails/OrderDetailModel.kt

@@ -0,0 +1,65 @@
+package cn.muchinfo.rma.view.base.future.orderDeatails
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.recyclerview.widget.RecyclerView
+import cn.muchinfo.rma.R
+import cn.muchinfo.rma.view.autoWidget.DetailItem
+import cn.muchinfo.rma.view.base.BaseViewModel
+import cn.muchinfo.rma.view.base.future.costs.OrderDetailData
+
+/**
+ * 单据详情
+ */
+class OrderDetailModel: BaseViewModel() {
+
+    var orderDetailList: ArrayList<OrderDetailData>? = ArrayList() // 资金信息
+
+
+//region cost info 资金信息
+
+    /**
+     * 获取配置器。
+     */
+    fun getCostInfoAdapter(): RecyclerView.Adapter<OrderDetailAdapter.CostInfoHolder> {
+        return OrderDetailAdapter(context, orderDetailList)
+    }
+
+    /**
+     * 资金信息的适配器。
+     */
+    class OrderDetailAdapter(context: Context?, list: ArrayList<OrderDetailData>?) : RecyclerView.Adapter<OrderDetailAdapter.CostInfoHolder>() {
+        private var list: ArrayList<OrderDetailData>? = null
+        private var inflater: LayoutInflater? = null
+        private var context: Context? = null
+        init {
+            this.list = list
+            this.inflater = LayoutInflater.from(context)
+            this.context = context
+        }
+
+        override fun getItemCount(): Int {
+            return list?.size ?: 0
+        }
+
+        class CostInfoHolder(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
+            var detailItem = itemView as DetailItem?
+        }
+
+        override fun onBindViewHolder(holder: CostInfoHolder, position: Int) {
+            holder.detailItem?.setLeftText(list?.get(position)?.getLeftText().toString())
+            holder.detailItem?.setRightText(list?.get(position)?.getRightText().toString())
+            list?.get(position)?.getRightTextPadding()?.let { holder.detailItem?.setRightValuePadding(it) }
+            list?.get(position)?.getLeftTextPadding()?.let { holder.detailItem?.setLeftValuePadding(it) }
+            holder.detailItem?.showLine(true)
+        }
+
+        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CostInfoHolder {
+            return CostInfoHolder(inflater?.inflate(R.layout.cost_info_item, parent, false))
+        }
+
+    }
+//endregion
+}

+ 34 - 0
RMA/app/src/main/res/layout/future_head_view.xml

@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content">
+
+    <TextView
+        android:id="@+id/if_future_id"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/str_futures"
+        android:textColor="@color/white"
+        app:layout_constraintEnd_toEndOf="@+id/id_account_info"
+        app:layout_constraintStart_toStartOf="@+id/id_account_info"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <ImageView
+        android:id="@+id/imageView"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:src="@mipmap/rma_down"
+        app:layout_constraintStart_toEndOf="@+id/id_account_info"
+        app:layout_constraintBottom_toBottomOf="@+id/id_account_info"
+        app:layout_constraintTop_toTopOf="@+id/if_future_id"/>
+
+    <TextView
+        android:id="@+id/id_account_info"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textColor="@color/white"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/if_future_id" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 34
RMA/app/src/main/res/layout/future_list.xml

@@ -13,40 +13,6 @@
         app:hv_showLeft="false"
         android:id="@+id/id_head"
         android:layout_height="wrap_content"/>
-
-<!--    <LinearLayout-->
-<!--        android:id="@+id/id_head"-->
-<!--        app:layout_constraintTop_toTopOf="parent"-->
-<!--        android:orientation="vertical"-->
-<!--        android:layout_width="match_parent"-->
-<!--        android:layout_height="@dimen/dp_50"-->
-<!--        tools:ignore="MissingConstraints"-->
-<!--        android:background="@color/main_title_bg_color">-->
-
-<!--        <TextView-->
-<!--            app:layout_constraintTop_toTopOf="parent"-->
-<!--            android:layout_width="wrap_content"-->
-<!--            android:textSize="17sp"-->
-<!--            android:id="@+id/id_title"-->
-<!--            android:text="期货"-->
-<!--            android:layout_gravity="center"-->
-<!--            android:layout_marginTop="5dp"-->
-<!--            android:textColor="@color/white"-->
-<!--            android:layout_height="wrap_content"/>-->
-
-<!--        <TextView-->
-<!--            app:layout_constraintTop_toTopOf="parent"-->
-<!--            android:visibility="visible"-->
-<!--            android:layout_width="wrap_content"-->
-<!--            android:textSize="13sp"-->
-<!--            android:id="@+id/id_account"-->
-<!--            android:text="12312313123123123"-->
-<!--            android:layout_gravity="center"-->
-<!--            android:textColor="@color/white"-->
-<!--            android:layout_height="wrap_content"/>-->
-
-<!--    </LinearLayout>-->
-
     <!--    first tabs-->
     <com.qmuiteam.qmui.widget.tab.QMUITabSegment
         android:layout_width="match_parent"

+ 21 - 0
RMA/app/src/main/res/layout/order_detail.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_height="match_parent"
+    tools:ignore="RtlSymmetry">
+    <cn.muchinfo.rma.view.autoWidget.HeadView
+        android:layout_width="match_parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:id="@+id/id_head"
+        android:layout_height="wrap_content"/>
+    <androidx.recyclerview.widget.RecyclerView
+        android:layout_width="match_parent"
+        android:id="@+id/id_order_detail_list"
+        android:paddingStart="15dp"
+        app:layout_constraintTop_toBottomOf="@+id/id_head"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_height="0dp"/>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 6 - 0
RMA/app/src/main/res/layout/order_detail_item.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<cn.muchinfo.rma.view.autoWidget.DetailItem
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/id_item"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"/>

+ 8 - 0
RMA/app/src/main/res/values/strings.xml

@@ -108,5 +108,13 @@
     <string name="str_close_yesterday">平昨</string>
     <string name="str_pl_margin">逐笔浮盈/\n保证金</string>
     <string name="str_zpl_plp">盯市浮盈/\n盈亏比例</string>
+    <string name="str_order_detail_head">订单详情(持仓)</string>
+    <string name="str_unit_name">合约名称</string>
+    <string name="str_order_all_num">今仓/总仓数量</string>
+    <string name="str_order_all_available">今仓/总仓可用</string>
+    <string name="str_ava_price">持仓均价(CNY)</string>
+    <string name="str_hold_pl">持仓盈亏(CNY)</string>
+    <string name="str_use_amount">占用金额(CNY)</string>
+    <string name="str_exchange">交易所</string>
 
 </resources>