无法加载 Fragment kotlin 文件中的函数方法

Couldn't load the method of the function in Fragment kotlin file

当我尝试使用点运算符在片段 kotlin 文件方法中调用 class 的函数时,出现错误。

正在尝试调用 ImageGallery 的 listOfImages 方法 class 作为,

dataList=ImageGallery.listOfImages(context)

但这仅给出错误 @listOfImages 字词。

错误:未解决的引用:listOfImages

在片段中,在 loadImaged() 方法之外:

var dataList:ArrayList<String> = ArrayList()

Class 从库中获取代码的代码:

public class ImageGallery {
    public fun listOfImages(context: Context) : ArrayList<String> {
        var imageList: ArrayList<String> = ArrayList()
        var projection = arrayOf(MediaStore.MediaColumns.DATA,MediaStore.Images.Media.BUCKET_DISPLAY_NAME)
        var orderBy:String=MediaStore.Video.Media.DATE_TAKEN

            val imagecursor: Cursor? = context.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
                null, orderBy+"DESC"
            )
            for (i in 0 until imagecursor!!.count) {
                imagecursor.moveToPosition(i)
                val dataColumnIndex =
                    imagecursor.getColumnIndex(MediaStore.Images.Media.DATA)
                imageList.add(imagecursor.getString(dataColumnIndex))
            }
            return imageList
        }
    }

片段中activity,

加载函数:

private fun loadImage(){
        recyclerView.setHasFixedSize(true)
        recyclerView.layoutManager=GridLayoutManager(context,3)

        dataList=ImageGallery.listOfImages(context)

        adapterr= context?.let { CustomAdapter(it,dataList) }
        recyclerView.adapter=adapterr
        galleryNumber?.text=("Photos ("+ dataList.size+")")
    }

您需要创建 ImageGallery 的实例才能使用它。换句话说,使用:

ImageGallery().listOfImages(context)

而不是

ImageGallery.listOfImages(context)

或者,将函数放在 ImageGallery 的伴生对象中,其工作方式类似于 Java 中的静态函数,如

public class ImageGallery {
    
    companion object {
        public fun listOfImages(context: Context) : ArrayList<String> {
            var imageList: ArrayList<String> = ArrayList()
            var projection = arrayOf(MediaStore.MediaColumns.DATA,MediaStore.Images.Media.BUCKET_DISPLAY_NAME)
            var orderBy:String=MediaStore.Video.Media.DATE_TAKEN

            val imagecursor: Cursor? = context.contentResolver.query(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, null,
                null, orderBy+"DESC"
            )
            for (i in 0 until imagecursor!!.count) {
                imagecursor.moveToPosition(i)
                val dataColumnIndex =
                    imagecursor.getColumnIndex(MediaStore.Images.Media.DATA)
                imageList.add(imagecursor.getString(dataColumnIndex))
            }
            return imageList
        }   
    }
}

这允许您使用

ImageGallery.listOfImages(context)