在 Android 中使用 Glide 和 Kotlin 在 ScrollView / RecyclerView 中显示 n 个图像

Display n number of images in a ScrollView / RecyclerView using Glide with Kotlin in Android

我是 Kotlin 语言的新手,所以我卡在了我的项目中间。

问题一:

我的本地目录中有一组图像文件(n...文件数量),但我无法使用 "For Loop" 在图像视图中显示所有文件,因为 Kotlin For 循环完全不同,我无法正确理解。

MainActivity.kt

package com.cambarkro.kotlintest

import android.net.Uri
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.os.Environment
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.RelativeLayout
import android.widget.Toast
import com.bumptech.glide.Glide
import java.io.File
import java.util.*
import kotlin.collections.ArrayList

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val linearLayout = findViewById<LinearLayout>(R.id.linearLayoutid)
    val imageView = ImageView(this)

    val path  = File(Environment.getExternalStorageDirectory().toString() + File.separator + "WhatsApp/Media/.Statuses/" )
    val statusFilesAry = path.listFiles() // Storing files in array

    if(path.exists())
    {
        if(statusFilesAry != null && statusFilesAry.size > 0 )
        {
            for(statusFile in statusFilesAry)
            {
                Glide
                        .with(this)
                        .load(statusFile)
                        .into(imageView)

                //linearLayout.addView(imageView)
            }
            linearLayout.addView(imageView)
        }


        Toast.makeText(this, "path found", Toast.LENGTH_SHORT).show()
    }
    else
    {
        Toast.makeText(this, "path Not found", Toast.LENGTH_SHORT).show()
    }
}

}

以上代码只展示了一张图片。

问题二:

从上面的 MainActivity.kt 代码中,有一个变量 "statusFilesAry" 包含所有图像文件的数组。我需要按 lastmodified 对这些数组元素进行排序。

在java中,我们可以使用Comparator来排序,但是在Kotlin中呢?

尝试在下面更改 java 代码中您想要的 kotlin

        if(path.exists())
        {
            if(statusFilesAry != null && statusFilesAry.size > 0 )
            {
              LinearLayout ll = new LinearLayout(this);
          ll.setLayoutParams(new ViewGroup.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
          LinearLayout.LayoutParams.MATCH_PARENT));
          ll.setOrientation(LinearLayout.VERTICAL);
                for(statusFile : statusFilesAry)
                {
                  ImageView imageView = ImageView(youractivity.this)
                LinearLayout.LayoutParams layoutParams = new   LinearLayout.LayoutParams(100, 100);
                imageView.setLayoutParams(layoutParams);

                        Glide
                            .with(this)
                            .load(statusFile)
                            .into(imageView)

                    ll.addView(imageView)
                }
             ScrollView scrollView = new ScrollView(this);
             scrollView.setFillViewport(true);
             scrollView.addView(ll);
                linearLayout.addView(scrollView)
            }

https://grokonez.com/kotlin/kotlin-array-sort-sortby-sortwith

这里是 kotlin 的修改代码

if (path.exists())
    {
        if (statusFilesAry != null && statusFilesAry.size > 0)
        {
            val ll = LinearLayout(this)
            ll.setOrientation(LinearLayout.VERTICAL)
            for(statusFile in statusFilesAry)
            {
                val imageView = ImageView(this)
                val layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT))
                imageView.setLayoutParams(layoutParams)
                Glide
                        .with(this)
                        .load(statusFile)
                        .into(imageView)
                ll.addView(imageView)
            }
            val scrollView = ScrollView(this)
            scrollView.setFillViewport(true)
            scrollView.addView(ll)
            linearLayout.addView(scrollView)
        }
    }