diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b73f9d3..7df18d0 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content"> + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b73f9d3..7df18d0 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content"> + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_g.xml b/app/src/main/res/layout/item_icon_text_rv_g.xml new file mode 100644 index 0000000..503fdfd --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_g.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b73f9d3..7df18d0 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content"> + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_g.xml b/app/src/main/res/layout/item_icon_text_rv_g.xml new file mode 100644 index 0000000..503fdfd --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_g.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_l.xml b/app/src/main/res/layout/item_icon_text_rv_l.xml new file mode 100644 index 0000000..ff1aa6d --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_l.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b73f9d3..7df18d0 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content"> + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_g.xml b/app/src/main/res/layout/item_icon_text_rv_g.xml new file mode 100644 index 0000000..503fdfd --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_g.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_l.xml b/app/src/main/res/layout/item_icon_text_rv_l.xml new file mode 100644 index 0000000..ff1aa6d --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_l.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ 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 4527e1c..819a003 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -18,6 +18,7 @@ 30dp 40dp 50dp + 55dp 80dp 100dp 200dp diff --git a/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt new file mode 100644 index 0000000..29b7b3f --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextGridAdapter.kt @@ -0,0 +1,57 @@ +package com.casic.br.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.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.casic.br.R + +/** + * 图片在上,文字在下,九宫格Adapter + * */ +class IconTextGridAdapter( + private val context: Context, + private val icons: IntArray, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_g, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + Glide.with(context) + .load(icons[position]) + .apply(RequestOptions.circleCropTransform()) + .into(holder.imageView) + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = icons.size + + private var clickListener: OnGridItemClickListener? = null + + interface OnGridItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnGridItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt new file mode 100644 index 0000000..1a4e58a --- /dev/null +++ b/app/src/main/java/com/casic/br/adapter/IconTextListAdapter.kt @@ -0,0 +1,50 @@ +package com.casic.br.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.br.R + +/** + * 文字列表Adapter + * */ +class IconTextListAdapter( + private val context: Context, + private val titles: Array +) : + RecyclerView.Adapter() { + + private var layoutInflater: LayoutInflater = LayoutInflater.from(context) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = ItemViewHolder( + layoutInflater.inflate(R.layout.item_icon_text_rv_l, parent, false) + ) + + override fun onBindViewHolder(holder: ItemViewHolder, position: Int) { + holder.textView.text = titles[position] + holder.itemView.setOnClickListener { + clickListener?.onItemClick(position) + } + } + + override fun getItemCount(): Int = titles.size + + private var clickListener: OnListItemClickListener? = null + + interface OnListItemClickListener { + fun onItemClick(position: Int) + } + + fun setOnGridItemClickListener(clickListener: OnListItemClickListener?) { + this.clickListener = clickListener + } + + class ItemViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + val imageView: ImageView = itemView.findViewById(R.id.imageView) + val textView: TextView = itemView.findViewById(R.id.textView) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt index 8d3d2ec..4cfae63 100644 --- a/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt +++ b/app/src/main/java/com/casic/br/fragment/MinePageFragment.kt @@ -1,7 +1,14 @@ package com.casic.br.fragment +import androidx.recyclerview.widget.DividerItemDecoration +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions import com.casic.br.R +import com.casic.br.adapter.IconTextGridAdapter +import com.casic.br.adapter.IconTextListAdapter +import com.casic.br.utils.LocaleConstant import com.pengxh.kt.lite.base.KotlinBaseFragment +import kotlinx.android.synthetic.main.fragment_mine.* import kotlinx.android.synthetic.main.include_base_title.* class MinePageFragment : KotlinBaseFragment() { @@ -13,10 +20,74 @@ } override fun initData() { + val shopGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SHOP_IMAGE, + LocaleConstant.SHOP_OPERATE + ) + shopRecyclerView.adapter = shopGridAdapter + shopGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + } + } + }) + val serverGridAdapter = IconTextGridAdapter( + requireContext(), + LocaleConstant.SERVER_IMAGE, + LocaleConstant.SERVER_OPERATE + ) + serverRecyclerView.adapter = serverGridAdapter + serverGridAdapter.setOnGridItemClickListener(object : + IconTextGridAdapter.OnGridItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) + + val settingsListAdapter = IconTextListAdapter( + requireContext(), LocaleConstant.SETTINGS_OPERATE + ) + settingsRecyclerView.addItemDecoration( + DividerItemDecoration( + requireContext(), + DividerItemDecoration.VERTICAL + ) + ) + settingsRecyclerView.adapter = settingsListAdapter + settingsListAdapter.setOnGridItemClickListener(object : + IconTextListAdapter.OnListItemClickListener { + override fun onItemClick(position: Int) { + when (position) { + 0 -> {} + 1 -> {} + 2 -> {} + 3 -> {} + } + } + }) } override fun initEvent() { } + + override fun onResume() { + Glide.with(this) + .load(R.mipmap.ic_launcher) + .apply(RequestOptions.circleCropTransform()) + .placeholder(R.mipmap.load_image_error) + .into(userAvatarView) + super.onResume() + } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/utils/DialogManager.kt b/app/src/main/java/com/casic/br/utils/DialogManager.kt new file mode 100644 index 0000000..da62e63 --- /dev/null +++ b/app/src/main/java/com/casic/br/utils/DialogManager.kt @@ -0,0 +1,37 @@ +package com.casic.br.utils; + +import android.app.Activity +import android.view.WindowManager +import com.pengxh.kt.lite.base.BaseSingleton +import com.qmuiteam.qmui.widget.dialog.QMUITipDialog + +class DialogManager private constructor(private val activity: Activity) { + + private lateinit var loadingDialog: QMUITipDialog + + companion object : BaseSingleton() { + override val creator: (Activity) -> DialogManager + get() = ::DialogManager + } + + fun showLoadingDialog(message: String) { + loadingDialog = QMUITipDialog + .Builder(activity) + .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING) + .setTipWord(message) + .create() + if (!activity.isDestroyed) { + try { + loadingDialog.show() + } catch (e: WindowManager.BadTokenException) { + e.printStackTrace() + } + } + } + + fun dismissLoadingDialog() { + if (loadingDialog.isShowing) { + loadingDialog.dismiss() + } + } +} diff --git a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt index dce9300..b2b3295 100644 --- a/app/src/main/java/com/casic/br/utils/LocaleConstant.kt +++ b/app/src/main/java/com/casic/br/utils/LocaleConstant.kt @@ -1,6 +1,7 @@ package com.casic.br.utils import android.Manifest +import com.casic.br.R object LocaleConstant { @@ -15,6 +16,16 @@ Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_PHONE_STATE ) + val SHOP_IMAGE = intArrayOf(R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher) + val SHOP_OPERATE = arrayOf("购物车", "我的订单", "故障售后") + val SERVER_IMAGE = intArrayOf( + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher, + R.mipmap.ic_launcher + ) + val SERVER_OPERATE = arrayOf("待付款", "待服务", "服务中", "评价") + val SETTINGS_OPERATE = arrayOf("账号安全", "账号绑定", "支付管理", "地址管理", "系统设置") /** * ============================================================================================= diff --git a/app/src/main/res/drawable/ic_edit.xml b/app/src/main/res/drawable/ic_edit.xml new file mode 100644 index 0000000..6d88a1c --- /dev/null +++ b/app/src/main/res/drawable/ic_edit.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/ic_right.xml b/app/src/main/res/drawable/ic_right.xml new file mode 100644 index 0000000..6020f09 --- /dev/null +++ b/app/src/main/res/drawable/ic_right.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_test.xml b/app/src/main/res/drawable/ic_test.xml new file mode 100644 index 0000000..2407055 --- /dev/null +++ b/app/src/main/res/drawable/ic_test.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml index b73f9d3..7df18d0 100644 --- a/app/src/main/res/layout/fragment_mine.xml +++ b/app/src/main/res/layout/fragment_mine.xml @@ -1,5 +1,6 @@ - + android:layout_height="wrap_content"> + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_g.xml b/app/src/main/res/layout/item_icon_text_rv_g.xml new file mode 100644 index 0000000..503fdfd --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_g.xml @@ -0,0 +1,24 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_icon_text_rv_l.xml b/app/src/main/res/layout/item_icon_text_rv_l.xml new file mode 100644 index 0000000..ff1aa6d --- /dev/null +++ b/app/src/main/res/layout/item_icon_text_rv_l.xml @@ -0,0 +1,27 @@ + + + + + + + + + \ 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 4527e1c..819a003 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -18,6 +18,7 @@ 30dp 40dp 50dp + 55dp 80dp 100dp 200dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index a785b87..d60f5c6 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -22,4 +22,14 @@ @dimen/sp_16 @drawable/button_white_selector + + +