diff --git a/app/build.gradle b/app/build.gradle index 6507f0a..7eb76a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,7 +54,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.10' implementation 'androidx.core:core-ktx:1.9.0' def androidx_version = '1.6.1' implementation "androidx.appcompat:appcompat:${androidx_version}" diff --git a/app/build.gradle b/app/build.gradle index 6507f0a..7eb76a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,7 +54,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.10' implementation 'androidx.core:core-ktx:1.9.0' def androidx_version = '1.6.1' implementation "androidx.appcompat:appcompat:${androidx_version}" diff --git a/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt b/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt deleted file mode 100644 index 8feefff..0000000 --- a/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.app.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.LinearLayout -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import com.casic.br.app.R -import com.pengxh.kt.lite.adapter.ViewHolder - -/** - * 数量可编辑图片适配器 - * - * @param context 使用适配的上下文 - * @param viewWidth RecyclerView实际宽度,一般情况下就是屏幕宽度,但是如果有其他控件和它在同一行,需要计算实际宽度,不然无法正确显示RecyclerView item的布局 - * @param imageCountLimit 最多显示的图片数目 - * @param spanCount 每行显示的图片数目 - * */ -class EditableImageAdapter( - private val context: Context, - private val viewWidth: Int, - private val imageCountLimit: Int, - private val spanCount: Int -) : RecyclerView.Adapter() { - - private val kTag = "EditableImageAdapter" - private var adapterItems = ArrayList() - - fun notifyImageItemRangeInserted(images: ArrayList) { - val previousSize = adapterItems.size - adapterItems.clear() - notifyItemRangeRemoved(0, previousSize) - adapterItems.addAll(images) - notifyItemRangeInserted(0, adapterItems.size) - } - - fun notifyImageItemRemoved(images: ArrayList) { - if (adapterItems.isNotEmpty()) { - //因为外部数据已经发生变化,直接添加已经变化了的数据即可做到数据同步 - notifyImageItemRangeInserted(images) - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - return ViewHolder( - LayoutInflater.from(context).inflate(R.layout.item_editable_rv_g, parent, false) - ) - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val imageView = holder.getView(R.id.imageView) - val imageSize = viewWidth / spanCount - val params = LinearLayout.LayoutParams(imageSize, imageSize) - imageView.layoutParams = params - - if (position == itemCount - 1 && adapterItems.size < imageCountLimit) { - imageView.setImageResource(R.drawable.ic_add_pic) - imageView.setOnClickListener { //添加图片 - itemClickListener?.onAddImageClick() - } - } else { - Glide.with(context).load(adapterItems[position]).into(imageView) - imageView.setOnClickListener { // 点击操作,查看大图 - itemClickListener?.onItemClick(holder.bindingAdapterPosition) - } - // 长按监听 - imageView.setOnLongClickListener { v -> //长按删除 - itemClickListener?.onItemLongClick(v, holder.bindingAdapterPosition) - true - } - } - } - - override fun getItemCount(): Int = if (adapterItems.size >= imageCountLimit) { - imageCountLimit - } else { - adapterItems.size + 1 - } - - private var itemClickListener: OnItemClickListener? = null - - fun setOnItemClickListener(itemClickListener: OnItemClickListener?) { - this.itemClickListener = itemClickListener - } - - interface OnItemClickListener { - fun onAddImageClick() - - fun onItemClick(position: Int) - - fun onItemLongClick(view: View?, position: Int) - } -} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 6507f0a..7eb76a3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -54,7 +54,7 @@ dependencies { //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.9' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.10' implementation 'androidx.core:core-ktx:1.9.0' def androidx_version = '1.6.1' implementation "androidx.appcompat:appcompat:${androidx_version}" diff --git a/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt b/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt deleted file mode 100644 index 8feefff..0000000 --- a/app/src/main/java/com/casic/br/app/adapter/EditableImageAdapter.kt +++ /dev/null @@ -1,96 +0,0 @@ -package com.casic.br.app.adapter - -import android.content.Context -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.widget.ImageView -import android.widget.LinearLayout -import androidx.recyclerview.widget.RecyclerView -import com.bumptech.glide.Glide -import com.casic.br.app.R -import com.pengxh.kt.lite.adapter.ViewHolder - -/** - * 数量可编辑图片适配器 - * - * @param context 使用适配的上下文 - * @param viewWidth RecyclerView实际宽度,一般情况下就是屏幕宽度,但是如果有其他控件和它在同一行,需要计算实际宽度,不然无法正确显示RecyclerView item的布局 - * @param imageCountLimit 最多显示的图片数目 - * @param spanCount 每行显示的图片数目 - * */ -class EditableImageAdapter( - private val context: Context, - private val viewWidth: Int, - private val imageCountLimit: Int, - private val spanCount: Int -) : RecyclerView.Adapter() { - - private val kTag = "EditableImageAdapter" - private var adapterItems = ArrayList() - - fun notifyImageItemRangeInserted(images: ArrayList) { - val previousSize = adapterItems.size - adapterItems.clear() - notifyItemRangeRemoved(0, previousSize) - adapterItems.addAll(images) - notifyItemRangeInserted(0, adapterItems.size) - } - - fun notifyImageItemRemoved(images: ArrayList) { - if (adapterItems.isNotEmpty()) { - //因为外部数据已经发生变化,直接添加已经变化了的数据即可做到数据同步 - notifyImageItemRangeInserted(images) - } - } - - override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - return ViewHolder( - LayoutInflater.from(context).inflate(R.layout.item_editable_rv_g, parent, false) - ) - } - - override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val imageView = holder.getView(R.id.imageView) - val imageSize = viewWidth / spanCount - val params = LinearLayout.LayoutParams(imageSize, imageSize) - imageView.layoutParams = params - - if (position == itemCount - 1 && adapterItems.size < imageCountLimit) { - imageView.setImageResource(R.drawable.ic_add_pic) - imageView.setOnClickListener { //添加图片 - itemClickListener?.onAddImageClick() - } - } else { - Glide.with(context).load(adapterItems[position]).into(imageView) - imageView.setOnClickListener { // 点击操作,查看大图 - itemClickListener?.onItemClick(holder.bindingAdapterPosition) - } - // 长按监听 - imageView.setOnLongClickListener { v -> //长按删除 - itemClickListener?.onItemLongClick(v, holder.bindingAdapterPosition) - true - } - } - } - - override fun getItemCount(): Int = if (adapterItems.size >= imageCountLimit) { - imageCountLimit - } else { - adapterItems.size + 1 - } - - private var itemClickListener: OnItemClickListener? = null - - fun setOnItemClickListener(itemClickListener: OnItemClickListener?) { - this.itemClickListener = itemClickListener - } - - interface OnItemClickListener { - fun onAddImageClick() - - fun onItemClick(position: Int) - - fun onItemLongClick(view: View?, position: Int) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt index 0b86273..eb04120 100644 --- a/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt +++ b/app/src/main/java/com/casic/br/app/view/AddHiddenTroubleActivity.kt @@ -7,7 +7,6 @@ import android.widget.ArrayAdapter import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope -import com.casic.br.app.adapter.EditableImageAdapter import com.casic.br.app.databinding.ActivityAddHiddenTroubleBinding import com.casic.br.app.extensions.combineFilePath import com.casic.br.app.model.DictionaryModel @@ -21,6 +20,7 @@ import com.luck.picture.lib.config.SelectMimeType import com.luck.picture.lib.entity.LocalMedia import com.luck.picture.lib.interfaces.OnResultCallbackListener +import com.pengxh.kt.lite.adapter.EditableImageAdapter import com.pengxh.kt.lite.base.KotlinBaseActivity import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets import com.pengxh.kt.lite.extensions.createCompressImageDir @@ -111,6 +111,14 @@ } } + //左外边距,左内边距,TextView宽度,内间距,右内边距,右外边距 + val viewWidth = getScreenWidth() - (15 + 15 + 65 + 10 + 15 + 15).dp2px(this) + imageAdapter = EditableImageAdapter(this, recyclerViewImages, viewWidth, 3, 3) + binding.recyclerView.addItemDecoration( + RecyclerViewItemOffsets(marginOffset, marginOffset, marginOffset, marginOffset) + ) + binding.recyclerView.adapter = imageAdapter + imageFileViewModel = ViewModelProvider(this)[ImageFileViewModel::class.java] imageFileViewModel.resultModel.observe(this) { if (it.code == 200) { @@ -119,18 +127,10 @@ map["alarmImage"] = url imagePaths.add(map) recyclerViewImages.add(url.combineFilePath()) - imageAdapter.notifyImageItemRangeInserted(recyclerViewImages) + imageAdapter.notifyDataSetChanged() } } - //左外边距,左内边距,TextView宽度,内间距,右内边距,右外边距 - val viewWidth = getScreenWidth() - (15 + 15 + 65 + 10 + 15 + 15).dp2px(this) - imageAdapter = EditableImageAdapter(this, viewWidth, 3, 3) - binding.recyclerView.addItemDecoration( - RecyclerViewItemOffsets(marginOffset, marginOffset, marginOffset, marginOffset) - ) - binding.recyclerView.adapter = imageAdapter - hiddenTroubleViewModel = ViewModelProvider(this)[HiddenTroubleViewModel::class.java] hiddenTroubleViewModel.addTroubleResult.observe(this) { if (it.code == 200) { @@ -178,7 +178,7 @@ override fun onItemLongClick(view: View?, position: Int) { selectedImages.removeAt(position) recyclerViewImages.removeAt(position) - imageAdapter.notifyImageItemRemoved(recyclerViewImages) + imageAdapter.notifyDataSetChanged() } })