From dad2ded3e9e9d2edf55c7ce10e791588b526961f Mon Sep 17 00:00:00 2001
From: 18034727885 <973609879@qq.com>
Date: 星期四, 14 五月 2026 09:11:57 +0800
Subject: [PATCH] 优化升级相册选择逻辑 升级版本

---
 app/build.gradle.kts                                                    |   29 ++
 app/src/main/java/com/example/smart/reqeust/RetrofitClient.kt           |    4 
 app/src/main/java/com/example/smart/ui/item/CreateItemActivity.kt       |    5 
 app/src/main/java/com/example/smart/image/SandboxEngine.java            |   20 ++
 settings.gradle.kts                                                     |    2 
 app/src/main/AndroidManifest.xml                                        |   60 ++---
 app/src/main/java/com/example/smart/image/CompressEngine.java           |   44 ++++
 app/src/main/java/com/example/smart/image/GlideEngine.java              |  116 ++++++++++++
 app/proguard-rules.pro                                                  |    8 
 app/src/main/java/com/example/smart/image/ImageProvider.kt              |  187 ++++++--------------
 app/src/main/java/com/example/smart/ui/item/adapter/ImageShowAdapter.kt |    2 
 app/src/main/res/drawable/ps_image_placeholder.xml                      |   16 +
 12 files changed, 317 insertions(+), 176 deletions(-)

diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d5f0a7d..77ecfb1 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -1,3 +1,6 @@
+import java.text.SimpleDateFormat
+import java.util.Date
+
 plugins {
     id("com.android.application")
     id("org.jetbrains.kotlin.android")
@@ -19,8 +22,8 @@
         applicationId = "com.example.smart"
         minSdk = 28
         targetSdk = 34
-        versionCode = 1103
-        versionName = "1.1.03"
+        versionCode = 1104
+        versionName = "1.1.04"
 
         testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
         vectorDrawables {
@@ -68,6 +71,16 @@
         dataBinding = true
     }
 
+    applicationVariants.configureEach {
+        outputs.configureEach {
+            if (this is com.android.build.gradle.internal.api.BaseVariantOutputImpl) {
+                outputFileName = "岱观智评-${buildType.name}-${versionName}-${
+                    SimpleDateFormat("yyyy-MM-dd").format(Date())
+                }.apk"
+            }
+        }
+    }
+
 }
 
 dependencies {
@@ -79,7 +92,7 @@
 
     implementation(project(mapOf("path" to ":basecore")))
     implementation(project(mapOf("path" to ":waterdrop")))
-    implementation(project(mapOf("path" to ":imageselector")))
+//    implementation(project(mapOf("path" to ":imageselector")))
     implementation("com.google.android.material:material:1.10.0")
     implementation("androidx.legacy:legacy-support-v4:1.0.0")
     implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.1")
@@ -108,7 +121,7 @@
     implementation("com.github.loperSeven:DateTimePicker:0.1.0")
 
     //implementation("com.github.crazyandcoder:citypicker:6.0.2")
-    implementation(project(":imageselector"))
+//    implementation(project(":imageselector"))
     implementation("com.burhanrashid52:photoeditor:3.0.2")
 
     testImplementation("junit:junit:4.13.2")
@@ -118,4 +131,12 @@
     // dialog
     implementation("com.afollestad.material-dialogs:core:3.3.0")
     implementation("com.afollestad.material-dialogs:bottomsheets:3.3.0")
+    // PictureSelector 基础 (必须)
+    implementation("io.github.lucksiege:pictureselector:v3.11.2")
+    // 图片压缩 (按需引入)
+    implementation("io.github.lucksiege:compress:v3.11.2")
+    // 图片裁剪 (按需引入)
+    implementation("io.github.lucksiege:ucrop:v3.11.2")
+    // 自定义相机 (按需引入)
+    implementation("io.github.lucksiege:camerax:v3.11.2")
 }
\ No newline at end of file
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 37040ae..ee581eb 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -223,3 +223,11 @@
 # 忽略高德地图 SDK 的可选依赖类
 -dontwarn com.amap.ams.gnss.GnssSoftLocator
 -dontwarn net.jafama.FastMath
+#PictureSelector
+-keep class com.luck.picture.lib.** { *; }
+#如果引入了Camerax库请添加混淆
+-keep class com.luck.lib.camerax.** { *; }
+#如果引入了Ucrop库请添加混淆
+-dontwarn com.yalantis.ucrop**
+-keep class com.yalantis.ucrop** { *; }
+-keep interface com.yalantis.ucrop** { *; }
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3a4741f..6141fdb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,30 +1,38 @@
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
-    <!--
-     Required only if your app needs to access images or photos
-     that other apps created.
-    -->
-    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
-    <!--
- Required only if your app needs to access videos
-         that other apps created.
-    -->
-    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
-    <!--
- Required only if your app needs to access audio files
-         that other apps created.
-    -->
-    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
 
-    <uses-permission
-        android:name="android.permission.MANAGE_EXTERNAL_STORAGE"
-        tools:ignore="ScopedStorage" />
+    <uses-feature
+        android:name="android.hardware.camera"
+        android:required="false" />
 
     <uses-permission
         android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
         tools:ignore="ProtectedPermissions" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.VIBRATE" />
 
+    <!--    Android 13版本适配,细化存储权限-->
+    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
+    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
+    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
+
+    <queries package="${applicationId}">
+        <intent>
+            <action android:name="android.media.action.IMAGE_CAPTURE" />
+        </intent>
+        <intent>
+            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE" />
+        </intent>
+    </queries>
     <application
         android:name=".MyApp"
         android:allowBackup="true"
@@ -44,22 +52,6 @@
             android:name="com.amap.api.v2.apikey"
             android:value="f7d1365236067d9c589141debd24f995" /> <!-- 定位需要的服务 -->
         <service android:name="com.amap.api.location.APSService" />
-
-
-        <!--        图片选择Activity-->
-        <activity android:name="com.donkingliang.imageselector.ImageSelectorActivity" />
-
-        <!--        //图片预览Activity-->
-        <activity
-            android:name="com.donkingliang.imageselector.PreviewActivity"
-            android:configChanges="orientation|keyboardHidden|screenSize"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
-
-        <!--        //图片剪切Activity-->
-        <activity
-            android:name="com.donkingliang.imageselector.ClipImageActivity"
-            android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
-
 
         <activity
             android:name=".ui.exclude.ExcludeActivity"
diff --git a/app/src/main/java/com/example/smart/image/CompressEngine.java b/app/src/main/java/com/example/smart/image/CompressEngine.java
new file mode 100644
index 0000000..ac09944
--- /dev/null
+++ b/app/src/main/java/com/example/smart/image/CompressEngine.java
@@ -0,0 +1,44 @@
+package com.example.smart.image;
+
+import android.content.Context;
+import android.net.Uri;
+
+import com.luck.picture.lib.engine.CompressFileEngine;
+import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
+
+import java.io.File;
+import java.util.ArrayList;
+
+import top.zibin.luban.Luban;
+import top.zibin.luban.OnNewCompressListener;
+
+/**
+ * 压缩引擎
+ */
+public class CompressEngine implements CompressFileEngine {
+    @Override
+    public void onStartCompress(Context context, ArrayList<Uri> source, OnKeyValueResultCallbackListener call) {
+        Luban.with(context).load(source).ignoreBy(100)
+                .setCompressListener(new OnNewCompressListener() {
+                    @Override
+                    public void onStart() {
+
+                    }
+
+                    @Override
+                    public void onSuccess(String source, File compressFile) {
+                        if (call != null) {
+                            call.onCallback(source, compressFile.getAbsolutePath());
+                        }
+                    }
+
+                    @Override
+                    public void onError(String source, Throwable e) {
+                        if (call != null) {
+                            call.onCallback(source, null);
+                        }
+                    }
+                }).launch();
+    }
+
+}
diff --git a/app/src/main/java/com/example/smart/image/GlideEngine.java b/app/src/main/java/com/example/smart/image/GlideEngine.java
new file mode 100644
index 0000000..cb167da
--- /dev/null
+++ b/app/src/main/java/com/example/smart/image/GlideEngine.java
@@ -0,0 +1,116 @@
+package com.example.smart.image;
+
+import android.content.Context;
+import android.widget.ImageView;
+import com.bumptech.glide.Glide;
+import com.bumptech.glide.load.resource.bitmap.CenterCrop;
+import com.bumptech.glide.load.resource.bitmap.RoundedCorners;
+import com.example.smart.R;
+import com.luck.picture.lib.engine.ImageEngine;
+import com.luck.picture.lib.utils.ActivityCompatHelper;
+
+/**
+ * @author:luck
+ * @date:2019-11-13 17:02
+ * @describe:Glide加载引擎
+ */
+public class GlideEngine implements ImageEngine {
+
+    /**
+     * 加载图片
+     *
+     * @param context   上下文
+     * @param url       资源url
+     * @param imageView 图片承载控件
+     */
+    @Override
+    public void loadImage(Context context, String url, ImageView imageView) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context)
+                .load(url)
+                .into(imageView);
+    }
+
+    @Override
+    public void loadImage(Context context, ImageView imageView, String url, int maxWidth, int maxHeight) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context)
+                .load(url)
+                .override(maxWidth, maxHeight)
+                .into(imageView);
+    }
+
+    /**
+     * 加载相册目录封面
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadAlbumCover(Context context, String url, ImageView imageView) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context)
+                .asBitmap()
+                .load(url)
+                .override(180, 180)
+                .sizeMultiplier(0.5f)
+                .transform(new CenterCrop(), new RoundedCorners(8))
+                .placeholder(R.drawable.ps_image_placeholder)
+                .into(imageView);
+    }
+
+
+    /**
+     * 加载图片列表图片
+     *
+     * @param context   上下文
+     * @param url       图片路径
+     * @param imageView 承载图片ImageView
+     */
+    @Override
+    public void loadGridImage(Context context, String url, ImageView imageView) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context)
+                .load(url)
+                .override(200, 200)
+                .centerCrop()
+                .placeholder(R.drawable.ps_image_placeholder)
+                .into(imageView);
+    }
+
+    @Override
+    public void pauseRequests(Context context) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context).pauseRequests();
+    }
+
+    @Override
+    public void resumeRequests(Context context) {
+        if (!ActivityCompatHelper.assertValidRequest(context)) {
+            return;
+        }
+        Glide.with(context).resumeRequests();
+    }
+
+    private GlideEngine() {
+    }
+
+    private static final class InstanceHolder {
+        static final GlideEngine instance = new GlideEngine();
+    }
+
+    public static GlideEngine createGlideEngine() {
+        return InstanceHolder.instance;
+    }
+}
diff --git a/app/src/main/java/com/example/smart/image/ImageProvider.kt b/app/src/main/java/com/example/smart/image/ImageProvider.kt
index 930d6c1..acec4c6 100644
--- a/app/src/main/java/com/example/smart/image/ImageProvider.kt
+++ b/app/src/main/java/com/example/smart/image/ImageProvider.kt
@@ -1,36 +1,31 @@
 package com.example.smart.image
 
 import FileUploader
-import android.R
 import android.app.Activity
-import android.content.Context
 import android.content.Intent
-import android.graphics.Color
 import android.net.Uri
 import android.os.Build
 import android.os.Environment
 import android.provider.Settings
-import androidx.activity.result.contract.ActivityResultContracts
-import androidx.appcompat.app.AppCompatActivity
-import androidx.fragment.app.FragmentActivity
-import com.donkingliang.imageselector.ImageSelectorActivity
-import com.donkingliang.imageselector.entry.RequestConfig
-import com.donkingliang.imageselector.utils.ImageSelector
 import com.example.basecore.util.FileTools
 import com.example.basecore.util.LogUtils
 import com.example.smart.bean.ImageRef
 import com.example.smart.widget.dialog.LoadingDialog
-import java.util.ArrayList
+import com.luck.picture.lib.basic.PictureSelector
+import com.luck.picture.lib.config.SelectMimeType
+import com.luck.picture.lib.entity.LocalMedia
+import com.luck.picture.lib.interfaces.OnResultCallbackListener
+import com.luck.picture.lib.style.PictureSelectorStyle
+import com.luck.picture.lib.style.SelectMainStyle
+import com.luck.picture.lib.style.TitleBarStyle
 
 
 class ImageProvider(val activity: Activity, val callback: IImageCallback) {
-
-    private val REQUEST_CODE: Int = 6666
-
     private var ossObjectName = ""
 
     private var maxCount = 1
     val loadingDialog: LoadingDialog = LoadingDialog(activity)
+
     /**
      * oss object name
      */
@@ -42,9 +37,9 @@
      * 检测android13 存储权限
      */
     private fun checkPer(): Boolean {
-         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
 
-           return  Environment.isExternalStorageManager()
+            return Environment.isExternalStorageManager()
 //                 return ContextCompat.checkSelfPermission(
 //                 activity,
 //                 Manifest.permission.MANAGE_EXTERNAL_STORAGE
@@ -54,91 +49,63 @@
     }
 
     fun showImageSelect(maxCount: Int = 9) {
-//        .backResId(android.support.v7.appcompat.R.drawable.abc_ic_ab_back_mtrl_am_alpha) // 标题
-//        val config = ISListConfig.Builder() // 是否多选, 默认true
-//            .multiSelect(false) // 是否记住上次选中记录, 仅当multiSelect为true的时候配置,默认为true
-//            .rememberSelected(false) // “确定”按钮背景色
-//            .btnBgColor(Color.GRAY) // “确定”按钮文字颜色
-//            .btnTextColor(Color.BLUE) // 使用沉浸式状态栏
-//            .statusBarColor(Color.parseColor("#3F51B5")) // 返回图标ResId
-//
-//            .title("图片") // 标题文字颜色
-//            .titleColor(Color.WHITE) // TitleBar背景色
-//            .titleBgColor(Color.parseColor("#3F51B5")) // 裁剪大小。needCrop为true的时候配置
-//            .cropSize(1, 1, 200, 200)
-//            .needCrop(true) // 第一个是否显示相机,默认true
-//            .needCamera(false) // 最大选择图片数量,默认9
-//            .maxNum(maxCount)
-//            .build()
-//
-//
-//// 跳转到图片选择器
-//        ISNav.getInstance().toListActivity(activity, config, REQUEST_CODE)
-
-
-
         if (!checkPer()) {
-
             val intent = Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION)
             intent.data = Uri.parse("package:" + activity.packageName)
             activity.startActivityForResult(intent, 0x00000012)
             return
         }
-
-
-        val config = RequestConfig()
-        config.useCamera = true
-        config.isSingle = false
-        config.maxSelectCount = maxCount
-        config.canPreview = true
-
         this.maxCount = maxCount
-        val intent = Intent(activity, ImageSelectorActivity::class.java)
-        intent.putExtra(ImageSelector.KEY_CONFIG, config)
-        if (activity is FragmentActivity) {
-            val register = activity.activityResultRegistry.register(
-                "101",
-                ActivityResultContracts.StartActivityForResult()
-            ) {
-                if (it == null) {
-                    return@register
+        //https://gitcode.com/gh_mirrors/pict/PictureSelector/?utm_source=gitcode_aigc_v1_t1&index=bottom&type=card&&uuid_tt_dd=10_37197039080-1778553766662-368769&isLogin=9&from_id=156450437&from_link=2b5eaab318b433d2570db6b0ce95c381
+        PictureSelector.create(activity)
+            .openGallery(SelectMimeType.ofImage())
+            .setImageEngine(GlideEngine.createGlideEngine())
+            .setCompressEngine(CompressEngine())
+            .setSandboxFileEngine(SandboxEngine())
+            .isPreviewImage(true)
+            .isDisplayCamera(true)
+            .setImageSpanCount(3)
+            .setSelectorUIStyle(PictureSelectorStyle().apply {//https://github.com/LuckSiege/PictureSelector/wiki/PictureSelector-3.0-%E4%B8%BB%E9%A2%98api%E8%AF%B4%E6%98%8E
+                titleBarStyle = TitleBarStyle().apply {
+                    isHideCancelButton = true
                 }
-                onActivityResult(REQUEST_CODE, it.resultCode, it.data)
-            }
-            register.launch(intent)
-        }
+                selectMainStyle = SelectMainStyle().apply {
+                    isCompleteSelectRelativeTop = true//完成按钮从底部放在右上角
+                    isPreviewSelectRelativeBottom = true//预览页选择按钮从顶部放在右下角
+                }
+            })
+            .setMaxSelectNum(maxCount)
+            .forResult(object : OnResultCallbackListener<LocalMedia?> {
+                override fun onResult(result: ArrayList<LocalMedia?>?) {
+                    if (result == null) {
+                        return
+                    }
+                    val filterNotNull = result.filterNotNull()
+                    if (filterNotNull.isEmpty()) {
+                        return
+                    }
+                    //获取选择器返回的数据
+                    val images = filterNotNull.mapNotNull { it.getAvailablePath() }
+                    LogUtils.e("images:$images")
+                    if (images.isEmpty()) {
+                        return
+                    }
+                    loadingDialog.show()
+                    if (maxCount == 1) {
+                        FileUploader.uploadFile(images[0], callback) {
+                            loadingDialog.dismiss()
+                        }
+                    } else {
+                        FileUploader.uploadFile(images, callback) {
+                            loadingDialog.dismiss()
+                        }
+                    }
+                }
+
+                override fun onCancel() {
+                }
+            })
     }
-
-    fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        if (resultCode != AppCompatActivity.RESULT_OK) {
-            return
-        }
-        if (requestCode == REQUEST_CODE && data != null) {
-            onSelectPhotoSuccess(data)
-        }
-    }
-
-    private fun onSelectPhotoSuccess(data: Intent) {
-        //获取选择器返回的数据
-        val images: ArrayList<String> =
-            data.getStringArrayListExtra(ImageSelector.SELECT_RESULT) as ArrayList<String>
-        val isCameraImage: Boolean = data.getBooleanExtra(ImageSelector.IS_CAMERA_IMAGE, false)
-
-
-
-        LogUtils.e("images:$images")
-        loadingDialog.show()
-        if (maxCount == 1) {
-            FileUploader.uploadFile(images[0], callback) {
-                loadingDialog.dismiss()
-            }
-        } else {
-            FileUploader.uploadFile(images, callback) {
-                loadingDialog.dismiss()
-            }
-        }
-    }
-
 
     /**
      * 上传绘制后的图片
@@ -149,44 +116,6 @@
             loadingDialog.dismiss()
         }
     }
-
-//    private val callBack = OssCallBack()
-//
-//    private inner class OssCallBack : IOssCallBack {
-//        override fun onAllListSuccess(ossPaths: MutableList<EntityRef>) {
-//            super.onAllListSuccess(ossPaths)
-//            loadingDialog.dismiss()
-//        }
-//
-//        override fun onSuccess(entityRef: EntityRef) {
-//            activity.runOnUiThread {
-//                if (maxCount == 1) {
-//                    loadingDialog.dismiss()
-//                }
-//                onUploadSuccess(entityRef)
-//            }
-//        }
-//
-//        override fun onFailed() {
-//            activity.runOnUiThread {
-//                loadingDialog.dismiss()
-//                onUploadFailed()
-//                activity.toast("图片上传失败,请重新选择")
-//            }
-//        }
-//    }
-//
-//    private fun onUploadSuccess(entity: EntityRef) {
-//        synchronized(this) {
-//            callback.onUploadSuccess(entity)
-//        }
-//    }
-//
-//    private fun onUploadFailed() {
-//        synchronized(this) {
-//            callback.onUploadFailed()
-//        }
-//    }
 
     interface IImageCallback {
 
diff --git a/app/src/main/java/com/example/smart/image/SandboxEngine.java b/app/src/main/java/com/example/smart/image/SandboxEngine.java
new file mode 100644
index 0000000..1bf497d
--- /dev/null
+++ b/app/src/main/java/com/example/smart/image/SandboxEngine.java
@@ -0,0 +1,20 @@
+package com.example.smart.image;
+
+import android.content.Context;
+
+import com.luck.picture.lib.engine.UriToFileTransformEngine;
+import com.luck.picture.lib.interfaces.OnKeyValueResultCallbackListener;
+import com.luck.picture.lib.utils.SandboxTransformUtils;
+
+/**
+ * 沙盒引擎 访问沙盒外资源
+ */
+public class SandboxEngine implements UriToFileTransformEngine {
+    @Override
+    public void onUriToFileAsyncTransform(Context context, String srcPath, String mineType, OnKeyValueResultCallbackListener call) {
+        if (call != null) {
+            String sandboxPath = SandboxTransformUtils.copyPathToSandbox(context, srcPath, mineType);
+            call.onCallback(srcPath, sandboxPath);
+        }
+    }
+}
diff --git a/app/src/main/java/com/example/smart/reqeust/RetrofitClient.kt b/app/src/main/java/com/example/smart/reqeust/RetrofitClient.kt
index de80a08..99bc85b 100644
--- a/app/src/main/java/com/example/smart/reqeust/RetrofitClient.kt
+++ b/app/src/main/java/com/example/smart/reqeust/RetrofitClient.kt
@@ -21,8 +21,8 @@
 
     private const val DEFAULT_TIMEOUT = 30L
 
-//    const val serverUrl = "http://47.108.113.190:8182/"
-    const val serverUrl = "http://192.168.110.111:8182/"
+    const val serverUrl = "http://47.108.113.190:8182/"
+//    const val serverUrl = "http://192.168.110.111:8182/"
 
     private fun rootUrl(): String {
         return serverUrl
diff --git a/app/src/main/java/com/example/smart/ui/item/CreateItemActivity.kt b/app/src/main/java/com/example/smart/ui/item/CreateItemActivity.kt
index 63a1552..390ee90 100644
--- a/app/src/main/java/com/example/smart/ui/item/CreateItemActivity.kt
+++ b/app/src/main/java/com/example/smart/ui/item/CreateItemActivity.kt
@@ -390,9 +390,4 @@
         super.onDestroy()
         MemberLiveData.clear()
     }
-
-    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
-        super.onActivityResult(requestCode, resultCode, data)
-        mImageProvider.onActivityResult(requestCode, resultCode, data)
-    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/smart/ui/item/adapter/ImageShowAdapter.kt b/app/src/main/java/com/example/smart/ui/item/adapter/ImageShowAdapter.kt
index 9e8a873..9e73bcc 100644
--- a/app/src/main/java/com/example/smart/ui/item/adapter/ImageShowAdapter.kt
+++ b/app/src/main/java/com/example/smart/ui/item/adapter/ImageShowAdapter.kt
@@ -79,7 +79,7 @@
         }
         holder.clear_img.setOnClickListener {
             data.remove(bean)
-            notifyItemRemoved(position)
+            notifyDataSetChanged()
         }
     }
 
diff --git a/app/src/main/res/drawable/ps_image_placeholder.xml b/app/src/main/res/drawable/ps_image_placeholder.xml
new file mode 100644
index 0000000..8c63cb1
--- /dev/null
+++ b/app/src/main/res/drawable/ps_image_placeholder.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <shape>
+            <size
+                android:width="100dp"
+                android:height="100dp" />
+            <solid android:color="@color/ps_color_light_grey" />
+        </shape>
+    </item>
+    <item>
+        <bitmap
+            android:gravity="center"
+            android:src="@drawable/ps_ic_placeholder" />
+    </item>
+</layer-list>
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 1d0cee4..ed55c31 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -19,4 +19,4 @@
 include(":app")
 include(":basecore")
 include(":waterdrop")
-include(":imageselector")
+//include(":imageselector")

--
Gitblit v1.7.1