Skip to content

Commit a711d03

Browse files
refactor(*): 优化EditableImageAdapter
1 parent e124df5 commit a711d03

File tree

2 files changed

+11
-25
lines changed

2 files changed

+11
-25
lines changed

app/src/main/java/com/pengxh/kt/lib/fragments/adapter/EditableImageAdapterFragment.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class EditableImageAdapterFragment : KotlinBaseFragment<FragmentAdapterEditableI
4848

4949
override fun initOnCreate(savedInstanceState: Bundle?) {
5050
val viewWidth = requireContext().getScreenWidth() - 100.dp2px(requireContext())
51-
imageAdapter = EditableImageAdapter(requireContext(), viewWidth, 9, 3)
51+
imageAdapter = EditableImageAdapter(requireContext(), recyclerViewImages, viewWidth, 9, 3)
5252
binding.recyclerView.addItemDecoration(
5353
RecyclerViewItemOffsets(marginOffset, marginOffset, marginOffset, marginOffset)
5454
)
@@ -72,7 +72,7 @@ class EditableImageAdapterFragment : KotlinBaseFragment<FragmentAdapterEditableI
7272
override fun onItemLongClick(view: View?, position: Int) {
7373
selectedImages.removeAt(position)
7474
recyclerViewImages.removeAt(position)
75-
imageAdapter.notifyImageItemRemoved(recyclerViewImages)
75+
imageAdapter.notifyDataSetChanged()
7676
}
7777
})
7878
}
@@ -84,10 +84,10 @@ class EditableImageAdapterFragment : KotlinBaseFragment<FragmentAdapterEditableI
8484
.setSelectedData(selectedImages)
8585
.forResult(object : OnResultCallbackListener<LocalMedia> {
8686
override fun onResult(result: ArrayList<LocalMedia>) {
87-
//重置已选的图片
87+
//因为设置了selectedImages,每次选择数据都会发生变化,所以需要清空之前的缓存
8888
selectedImages.clear()
89-
//因为result会带着之前的数据,所以需要清空之前已经add的数据
9089
recyclerViewImages.clear()
90+
9191
//数据链处理已选的图片
9292
lifecycleScope.launch {
9393
flow {
@@ -132,7 +132,7 @@ class EditableImageAdapterFragment : KotlinBaseFragment<FragmentAdapterEditableI
132132
val file = msg.obj as File
133133

134134
recyclerViewImages.add(file.absolutePath)
135-
imageAdapter.notifyImageItemRangeInserted(recyclerViewImages)
135+
imageAdapter.notifyDataSetChanged()
136136
}
137137
return true
138138
}

lite/src/main/java/com/pengxh/kt/lite/adapter/EditableImageAdapter.kt

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,19 @@ import com.pengxh.kt.lite.R
1515
* 数量可编辑图片适配器
1616
*
1717
* @param context 使用适配的上下文
18+
* @param images RecyclerView内数据
1819
* @param viewWidth RecyclerView实际宽度,一般情况下就是屏幕宽度,但是如果有其他控件和它在同一行,需要计算实际宽度,不然无法正确显示RecyclerView item的布局
1920
* @param imageCountLimit 最多显示的图片数目
2021
* @param spanCount 每行显示的图片数目
2122
* */
2223
class EditableImageAdapter(
2324
private val context: Context,
25+
private val images: ArrayList<String>,
2426
private val viewWidth: Int,
2527
private val imageCountLimit: Int,
2628
private val spanCount: Int
2729
) : RecyclerView.Adapter<ViewHolder>() {
2830

29-
private var adapterItems = ArrayList<String>()
30-
31-
fun notifyImageItemRangeInserted(images: ArrayList<String>) {
32-
val previousSize = adapterItems.size
33-
adapterItems.clear()
34-
notifyItemRangeRemoved(0, previousSize)
35-
adapterItems.addAll(images)
36-
notifyItemRangeInserted(0, adapterItems.size)
37-
}
38-
39-
fun notifyImageItemRemoved(images: ArrayList<String>) {
40-
if (adapterItems.isNotEmpty()) {
41-
notifyImageItemRangeInserted(images)
42-
}
43-
}
44-
4531
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
4632
return ViewHolder(
4733
LayoutInflater.from(context).inflate(R.layout.item_editable_rv_g, parent, false)
@@ -54,13 +40,13 @@ class EditableImageAdapter(
5440
val params = LinearLayout.LayoutParams(imageSize, imageSize)
5541
imageView.layoutParams = params
5642

57-
if (position == itemCount - 1 && adapterItems.size < imageCountLimit) {
43+
if (position == itemCount - 1 && images.size < imageCountLimit) {
5844
imageView.setImageResource(R.drawable.ic_add_pic)
5945
imageView.setOnClickListener { //添加图片
6046
itemClickListener?.onAddImageClick()
6147
}
6248
} else {
63-
Glide.with(context).load(adapterItems[position]).into(imageView)
49+
Glide.with(context).load(images[position]).into(imageView)
6450
imageView.setOnClickListener { // 点击操作,查看大图
6551
itemClickListener?.onItemClick(holder.bindingAdapterPosition)
6652
}
@@ -72,10 +58,10 @@ class EditableImageAdapter(
7258
}
7359
}
7460

75-
override fun getItemCount(): Int = if (adapterItems.size >= imageCountLimit) {
61+
override fun getItemCount(): Int = if (images.size >= imageCountLimit) {
7662
imageCountLimit
7763
} else {
78-
adapterItems.size + 1
64+
images.size + 1
7965
}
8066

8167
private var itemClickListener: OnItemClickListener? = null

0 commit comments

Comments
 (0)