diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 4b89b9d..0643064 100644
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -49,9 +49,10 @@
android:textSize="@dimen/sp_22" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true">
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 4b89b9d..0643064 100644
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -49,9 +49,10 @@
android:textSize="@dimen/sp_22" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 4b89b9d..0643064 100644
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -49,9 +49,10 @@
android:textSize="@dimen/sp_22" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/include_empty_view.xml b/app/src/main/res/layout/include_empty_view.xml
new file mode 100644
index 0000000..37de024
--- /dev/null
+++ b/app/src/main/res/layout/include_empty_view.xml
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 4b89b9d..0643064 100644
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -49,9 +49,10 @@
android:textSize="@dimen/sp_22" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/include_empty_view.xml b/app/src/main/res/layout/include_empty_view.xml
new file mode 100644
index 0000000..37de024
--- /dev/null
+++ b/app/src/main/res/layout/include_empty_view.xml
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_notice_rv_l.xml b/app/src/main/res/layout/item_notice_rv_l.xml
new file mode 100644
index 0000000..40710f8
--- /dev/null
+++ b/app/src/main/res/layout/item_notice_rv_l.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 97c55c3..0d85b90 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,7 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
new file mode 100644
index 0000000..722e4d1
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/adapter/NoticeListAdapter.kt
@@ -0,0 +1,62 @@
+package com.casic.xz.meterage.adapter
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.model.NoticeListModel
+
+class NoticeListAdapter(
+ context: Context, private val dataRows: MutableList
+) : RecyclerView.Adapter() {
+
+ private var layoutInflater: LayoutInflater = LayoutInflater.from(context)
+
+ override fun getItemCount(): Int = dataRows.size
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder(
+ layoutInflater.inflate(R.layout.item_notice_rv_l, parent, false)
+ )
+
+ override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
+ //绑定数据
+ val rowsBean = dataRows[position]
+// holder.noticeTypeIconView.setImageResource()
+ holder.noticeTitleView.text = rowsBean.noticeTitle
+ holder.noticeDateView.text = rowsBean.noticeTime
+ holder.noticeContentView.text = rowsBean.noticeSketch
+ val state = if (rowsBean.isDel == 0) {
+ View.VISIBLE
+ } else {
+ View.INVISIBLE
+ }
+ holder.readStateView.visibility = state
+
+ //绑定事件
+ holder.itemView.setOnClickListener {
+ listener?.onItemClicked(position)
+ }
+ }
+
+ inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
+ var noticeTypeIconView: ImageView = view.findViewById(R.id.noticeTypeIconView)
+ var readStateView: View = view.findViewById(R.id.readStateView)
+ var noticeTitleView: TextView = view.findViewById(R.id.noticeTitleView)
+ var noticeDateView: TextView = view.findViewById(R.id.noticeDateView)
+ var noticeContentView: TextView = view.findViewById(R.id.noticeContentView)
+ }
+
+ private var listener: OnItemClickListener? = null
+
+ interface OnItemClickListener {
+ fun onItemClicked(position: Int)
+ }
+
+ fun setOnItemClickListener(onClickListener: OnItemClickListener?) {
+ this.listener = onClickListener
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
new file mode 100644
index 0000000..016ebcb
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/extensions/ArrayList.kt
@@ -0,0 +1,28 @@
+package com.casic.xz.meterage.extensions
+
+/**
+ * ArrayList扩展方法
+ */
+
+//将图片集合格式化成满足上传格式的数据
+fun ArrayList.reformat(): String {
+ if (this.isEmpty()) return ""
+ val builder = StringBuilder()
+ //循环遍历元素,同时得到元素index(下标)
+ this.forEachIndexed { index, s ->
+ if (index == this.size - 1) {
+ builder.append(s)
+ } else {
+ builder.append(s).append(",")
+ }
+ }
+ return builder.toString()
+}
+
+fun addAll(vararg args: String): ArrayList {
+ val result = ArrayList()
+ args.forEach {
+ result.add(it)
+ }
+ return result
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
index 9b5faf6..b4628f3 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt
@@ -5,8 +5,10 @@
import com.casic.xz.meterage.R
import com.casic.xz.meterage.adapter.HomeGridAdapter
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import kotlinx.android.synthetic.main.fragment_home.*
class HomePageFragment : KotlinBaseFragment() {
@@ -42,7 +44,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_home
diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
index aaeb9df..7e75abe 100644
--- a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
+++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt
@@ -4,9 +4,11 @@
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
import com.casic.xz.meterage.utils.LocaleConstant
+import com.casic.xz.meterage.view.NoticeListActivity
import com.casic.xz.meterage.vm.NoticeViewModel
import com.casic.xz.meterage.vm.UserViewModel
import com.pengxh.kt.lite.base.KotlinBaseFragment
+import com.pengxh.kt.lite.extensions.navigatePageTo
import com.pengxh.kt.lite.utils.SaveKeyValues
import kotlinx.android.synthetic.main.fragment_mine.*
@@ -44,7 +46,9 @@
}
override fun initEvent() {
-
+ noticeLayout.setOnClickListener {
+ requireContext().navigatePageTo()
+ }
}
override fun initLayoutView(): Int = R.layout.fragment_mine
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
new file mode 100644
index 0000000..a14ec4d
--- /dev/null
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeDetailActivity.kt
@@ -0,0 +1,56 @@
+package com.casic.xz.meterage.view
+
+import android.annotation.SuppressLint
+import androidx.lifecycle.ViewModelProvider
+import com.casic.xz.meterage.R
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import kotlinx.android.synthetic.main.activity_notice_detail.*
+import kotlinx.android.synthetic.main.include_base_title.*
+
+@SuppressLint("SetTextI18n")
+class NoticeDetailActivity : KotlinBaseActivity() {
+
+ private lateinit var noticeViewModel: NoticeViewModel
+
+ override fun initData() {
+ leftBackView.setOnClickListener { finish() }
+ titleView.text = "通知公告"
+
+ val args = intent.getStringArrayListExtra(Constant.INTENT_PARAM)!!
+
+ noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.getNoticeList(args[0], args[1], args[2], "", "", 1)
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRow = it.data?.rows!![0]
+
+ noticeDateView.text = dataRow.noticeTime
+ noticePublisherView.text = "发布人 ${dataRow.noticePublisher}"
+ noticeCompanyView.text = "发布单位 ${dataRow.noticeCompany}"
+
+ noticeNoView.text = dataRow.noticeNo
+ noticeTitleView.text = dataRow.noticeTitle
+ noticeSketchView.text = dataRow.noticeSketch
+ }
+ })
+ }
+
+ override fun initEvent() {
+
+ }
+
+ override fun initLayoutView(): Int = R.layout.activity_notice_detail
+
+ override fun observeRequestState() {
+
+ }
+
+ override fun setupTopBarLayout() {
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
index 6dde53b..3c90012 100644
--- a/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
+++ b/app/src/main/java/com/casic/xz/meterage/view/NoticeListActivity.kt
@@ -1,20 +1,163 @@
package com.casic.xz.meterage.view
+import android.os.Handler
+import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.casic.xz.meterage.R
+import com.casic.xz.meterage.adapter.NoticeListAdapter
+import com.casic.xz.meterage.extensions.addAll
+import com.casic.xz.meterage.extensions.initLayoutImmersionBar
+import com.casic.xz.meterage.extensions.showEmptyPage
+import com.casic.xz.meterage.model.NoticeListModel
import com.casic.xz.meterage.vm.NoticeViewModel
+import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.extensions.navigatePageTo
+import com.pengxh.kt.lite.extensions.show
+import com.pengxh.kt.lite.utils.WeakReferenceHandler
+import com.pengxh.kt.lite.widget.dialog.AlertControlDialog
+import kotlinx.android.synthetic.main.activity_notice_list.*
+import kotlinx.android.synthetic.main.include_empty_view.*
class NoticeListActivity : KotlinBaseActivity() {
+ private lateinit var weakReferenceHandler: WeakReferenceHandler
private lateinit var noticeViewModel: NoticeViewModel
+ private lateinit var noticeListAdapter: NoticeListAdapter
+ private var dataBeans: MutableList = ArrayList()
+ private var pageIndex = 1
+ private var isRefresh = false
+ private var isLoadMore = false
override fun initData() {
+ weakReferenceHandler = WeakReferenceHandler(callback)
noticeViewModel = ViewModelProvider(this)[NoticeViewModel::class.java]
+ noticeViewModel.noticeResult.observe(this, {
+ if (it.code == 200) {
+ val dataRows = it.data?.rows!!
+// countBadeNumber(dataRows)
+ when {
+ isRefresh -> {
+ dataBeans.clear()
+ dataBeans = dataRows
+ noticeLayout.finishRefresh()
+ isRefresh = false
+ }
+ isLoadMore -> {
+ if (dataRows.size == 0) {
+ "到底了,别拉了".show(this)
+ }
+ dataBeans.addAll(dataRows)
+ noticeLayout.finishLoadMore()
+ isLoadMore = false
+ }
+ else -> {
+ dataBeans = dataRows
+ }
+ }
+ weakReferenceHandler.sendEmptyMessage(2023013101)
+ }
+ })
}
override fun initEvent() {
+ leftBackView.setOnClickListener { finish() }
+ rightOperateView.setOnClickListener {
+ AlertControlDialog.Builder()
+ .setContext(this)
+ .setTitle("提示")
+ .setMessage("确定将所有未读消息标为已读?")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertControlDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+ }
+
+ override fun onConfirmClick() {
+ //TODO 设置为已读
+ }
+ }).build().show()
+ }
+
+ if (hasNoticePermission()) {
+ openSystemNoticeLayout.visibility = View.GONE
+ openSystemNoticeLayout.visibility = View.GONE
+ } else {
+ openSystemNoticeLayout.setOnClickListener {
+
+ }
+
+
+ closeLayoutView.setOnClickListener {
+ openSystemNoticeLayout.visibility = View.GONE
+ }
+ }
+
+ noticeLayout.setOnRefreshListener {
+ isRefresh = true
+ //刷新之后页码重置
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+
+ noticeLayout.setOnLoadMoreListener {
+ isLoadMore = true
+ pageIndex++
+ getNoticeListByPage()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ getNoticeListByPage()
+ }
+
+ private fun getNoticeListByPage() {
+ noticeViewModel.getNoticeList("", "", "", "", "", pageIndex)
+ }
+
+ private val callback = Handler.Callback {
+ when (it.what) {
+ 2023013101 -> {
+ if (isRefresh || isLoadMore) {
+ noticeListAdapter.notifyDataSetChanged()
+ } else {
+ if (dataBeans.size == 0) {
+ emptyView!!.showEmptyPage("没有任何消息") {
+ pageIndex = 1
+ getNoticeListByPage()
+ }
+ } else {
+ emptyView!!.hide()
+ noticeListAdapter = NoticeListAdapter(this, dataBeans)
+ noticeRecyclerView.adapter = noticeListAdapter
+ noticeListAdapter.setOnItemClickListener(object :
+ NoticeListAdapter.OnItemClickListener {
+ override fun onItemClicked(position: Int) {
+ val rowsModel = dataBeans[position]
+ val allArgs = addAll(
+ rowsModel.noticeNo,
+ rowsModel.noticeTitle,
+ rowsModel.noticePublisher,
+ "",
+ ""
+ )
+ navigatePageTo(allArgs)
+ }
+ })
+ }
+ }
+ }
+ }
+ true
+ }
+
+ //TODO 判断是否开启通知权限
+ private fun hasNoticePermission(): Boolean {
+
+ return false
}
override fun initLayoutView(): Int = R.layout.activity_notice_list
@@ -24,6 +167,7 @@
}
override fun setupTopBarLayout() {
-
+ ImmersionBar.with(this).statusBarDarkFont(true).init()
+ initLayoutImmersionBar(rootView)
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
new file mode 100644
index 0000000..7b86026
--- /dev/null
+++ b/app/src/main/res/drawable/bg_solid_layout_blue_radius_5.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_error.xml b/app/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..3ee0260
--- /dev/null
+++ b/app/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_notice.xml b/app/src/main/res/drawable/ic_notice.xml
new file mode 100644
index 0000000..962e03f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_notice.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_qr_code.xml b/app/src/main/res/drawable/ic_qr_code.xml
index 43c8c42..3fc5935 100644
--- a/app/src/main/res/drawable/ic_qr_code.xml
+++ b/app/src/main/res/drawable/ic_qr_code.xml
@@ -5,8 +5,8 @@
android:viewportHeight="1024">
+ android:pathData="M733.37,673.68H285.51a88.58,88.58 0,0 1,-88.58 -88.52v-149.56a88.58,88.58 0,0 1,88.58 -88.52h447.86a88.58,88.58 0,0 1,88.58 88.52v149.56a88.58,88.58 0,0 1,-88.58 88.52z" />
+ android:pathData="M115.9,410.39A39.1,39.1 0,0 1,76.8 371.3L76.8,248.87A172.27,172.27 0,0 1,248.87 76.8L366.08,76.8a39.1,39.1 0,1 1,0 78.19L248.87,154.99a93.99,93.99 0,0 0,-93.89 93.89L154.99,371.3a39.1,39.1 0,0 1,-39.09 39.09zM371.31,942.08L248.87,942.08A172.27,172.27 0,0 1,76.8 770.01v-114.61a39.1,39.1 0,1 1,78.19 0v114.61a93.99,93.99 0,0 0,93.89 93.89h122.43a39.1,39.1 0,1 1,0 78.19zM770.01,942.08L652.8,942.08a39.1,39.1 0,1 1,0 -78.19h117.22a93.99,93.99 0,0 0,93.89 -93.89v-119.81a39.1,39.1 0,0 1,78.19 0v119.83A172.26,172.26 0,0 1,770.01 942.08zM902.99,410.39a39.1,39.1 0,0 1,-39.1 -39.09L863.89,248.87a93.99,93.99 0,0 0,-93.89 -93.89h-125.04a39.1,39.1 0,1 1,0 -78.19h125.04A172.27,172.27 0,0 1,942.08 248.87L942.08,371.3a39.1,39.1 0,0 1,-39.09 39.09zM717.94,551.14L300.94,551.14a39.1,39.1 0,0 1,0 -78.19h417a39.1,39.1 0,1 1,0 78.19z" />
diff --git a/app/src/main/res/drawable/ic_read_notice.xml b/app/src/main/res/drawable/ic_read_notice.xml
new file mode 100644
index 0000000..fef5b72
--- /dev/null
+++ b/app/src/main/res/drawable/ic_read_notice.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_right_black.xml b/app/src/main/res/drawable/ic_right_black.xml
new file mode 100644
index 0000000..a25faa7
--- /dev/null
+++ b/app/src/main/res/drawable/ic_right_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_notice_detail.xml b/app/src/main/res/layout/activity_notice_detail.xml
new file mode 100644
index 0000000..25b055f
--- /dev/null
+++ b/app/src/main/res/layout/activity_notice_detail.xml
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_notice_list.xml b/app/src/main/res/layout/activity_notice_list.xml
index 41d2ef1..8e224c0 100644
--- a/app/src/main/res/layout/activity_notice_list.xml
+++ b/app/src/main/res/layout/activity_notice_list.xml
@@ -1,6 +1,106 @@
+ android:layout_height="match_parent"
+ android:background="@color/mainBackground"
+ android:orientation="vertical">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8d76acb..41b32a9 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -44,6 +44,7 @@
diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml
index 4b89b9d..0643064 100644
--- a/app/src/main/res/layout/fragment_mine.xml
+++ b/app/src/main/res/layout/fragment_mine.xml
@@ -49,9 +49,10 @@
android:textSize="@dimen/sp_22" />
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true">
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/include_empty_view.xml b/app/src/main/res/layout/include_empty_view.xml
new file mode 100644
index 0000000..37de024
--- /dev/null
+++ b/app/src/main/res/layout/include_empty_view.xml
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_notice_rv_l.xml b/app/src/main/res/layout/item_notice_rv_l.xml
new file mode 100644
index 0000000..40710f8
--- /dev/null
+++ b/app/src/main/res/layout/item_notice_rv_l.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 921964f..a811954 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -47,7 +47,4 @@
255dp
-
- 16dp
- 16dp
\ No newline at end of file