簡體   English   中英

Android Studio:Kotlin 隨機數生成器不工作

[英]Android Studio: Kotlin Random Number Generator not working

我在 RecyclerView 中使用 CardView 來顯示城市名稱列表。

除了城市名稱,我想添加一個包含隨機背景顏色和城市名稱首字母的彎曲方形圖像,就像我們的 Gmail 帳戶的默認圖像一樣。

我嘗試了以下方法在顏色數組中生成隨機索引並將顏色傳遞給我的 CustomAdapter 的 ViewHolder class。

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#FFBB86FC</color>
    <color name="purple_500">#FF6200EE</color>
    <color name="purple_700">#FF3700B3</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>

    <string-array name="allColors">
        <item>#99cc00</item>
        <item>#33b5e5</item>
        <item>#0099cc</item>
        <item>#547bca</item>
        <item>#aa66cc</item>
        <item>#9933cc</item>
        <item>#669900</item>
        <item>#aeb857</item>
        <item>#cc0000</item>
        <item>#df5948</item>
        <item>#ff4444</item>
        <item>#ae6b23</item>
        <item>#ff8800</item>
        <item>#e5ae4f</item>
        <item>#ffbb33</item>
        <item>#cccccc</item>
        <item>#888888</item>
    </string-array>

</resources>

自定義適配器.kt

package com.x.y.z
import android.graphics.Color
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.x.y.z.databinding.CityCardviewActivityBinding
import com.x.y.z.models.LocationWeather
import com.x.y.z.models.LocationWeatherItem
import kotlin.random.Random


class CustomAdapter(private val allLocationslist : LocationWeather, private val onClickCallback :  (LocationWeatherItem) -> Unit) : RecyclerView.Adapter<CustomAdapter.ViewHolder>() {

    class ViewHolder(private val binding: CityCardviewActivityBinding) : RecyclerView.ViewHolder(binding.root) {

        fun bind(get: LocationWeatherItem, color: Int) {
            binding.city.text = get.city
            binding.firstLetter.text = get.city[0].toString()
            binding.roundCardView.setCardBackgroundColor(color)
        }

    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        val itemView = CityCardviewActivityBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return ViewHolder(itemView)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        val idx = (0 until arrayOf(R.array.allColors).size).random()
        holder.bind(allLocationslist[position], arrayOf(R.array.allColors)[idx])
        holder.itemView.setOnClickListener { v ->
            onClickCallback.invoke(allLocationslist[position])
        }

    }

    override fun getItemCount(): Int {
        return allLocationslist.size
    }
}

我剛剛使用以下方法生成了一個隨機索引,並將該索引處的值傳遞給 ViewHolder Class。

val idx = (0 until arrayOf(R.array.allColors).size).random()

但是所有 CardView 的背景顏色在運行時都是相同的。

在此處輸入圖像描述

我剛剛在 Android 開始了我的旅程,我無法找出錯誤。 我懇請我們的社區成員分享他們的寶貴見解。 謝謝你。

arrayOf(R.array.allColors)為您提供一個列表,其中僅包含一個項目,即allColors的 id。 您可以使用它來獲取 colors 的列表

val randomColor = resources.getStringArray(R.array.exo_playback_speeds).random()

首先在 color.xml 中定義您的 colors 並創建它的數組。

<?xml version="1.0" encoding="utf-8"?>
<resources>

<item name="blue" type="color">#FF33B5E5</item>
<item name="purple" type="color">#FFAA66CC</item>
<item name="green" type="color">#FF99CC00</item>
<item name="orange" type="color">#FFFFBB33</item>
<item name="red" type="color">#FFFF4444</item>
<item name="darkblue" type="color">#FF0099CC</item>
<item name="darkpurple" type="color">#FF9933CC</item>
<item name="darkgreen" type="color">#FF669900</item>
<item name="darkorange" type="color">#FFFF8800</item>
<item name="darkred" type="color">#FFCC0000</item>

<integer-array name="androidcolors">
    <item>@color/blue</item>
    <item>@color/purple</item>
    <item>@color/green</item>
    <item>@color/orange</item>
    <item>@color/red</item>
    <item>@color/darkblue</item>
    <item>@color/darkpurple</item>
    <item>@color/darkgreen</item>
    <item>@color/darkorange</item>
    <item>@color/darkred</item>
</integer-array>

</resources>

現在在 onCreate 方法中生成如下所示的隨機顏色。

int[] androidColors = getResources().getIntArray(R.array.androidcolors);
int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];

最后設置這個生成的顏色。

view.setBackgroundColor(randomAndroidColor); 

來源取自這里

R class 包含只是整數的資源標識符。 因此, arrayOf(R.array.allColors)是一個僅包含一個 integer 的數組,它是一個資源 ID,而不是您的任何顏色值。

要訪問數組資源,請將arrayOf(R.array.allColors)替換為resources.getIntArray(R.array.allColors)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM