簡體   English   中英

評級欄中的星級| kotlin

[英]rate stars in rating bar | kotlin

我是 kotlin 的新手,我需要幫助。 我有 5 星列表(如評分欄),想要嗎? 例如,當您單擊 3d 星前兩個更改顏色時? 我怎樣才能用循環寫它? 如果/否則? 我希望你能幫助我! 謝謝!!

任務:

    // Input - get elements or number or other data

    //     list of stars (items and index of items)
    //     rating number (x/5) (number of clicked star)
    //
    // Loops - FOR - iterate over elements
    // Conditions - IF/ELSE - what to do with element

    // Action:
    //    loop over stars (star & indexOfStar)
    //    set color: (yellow for start behind chosen one including chosen one (rating number))

有這個代碼:

 val star1: ImageView = binding.star1
        binding.star1.setOnClickListener {
            Log.d("Star 1","Rate 1")
            star1.setImageDrawable(ContextCompat.getDrawable(star1.context, com.example.godelreviews.R.drawable.star2))}

        val star2: ImageView = binding.star2
        binding.star2.setOnClickListener {
            Log.d("Star 2","Rate 2")
            star2.setImageDrawable(ContextCompat.getDrawable(star1.context, com.example.godelreviews.R.drawable.star2))}

        val star3: ImageView = binding.star3
        binding.star3.setOnClickListener {
            Log.d("Star 3","Rate 3")
            star3.setImageDrawable(ContextCompat.getDrawable(star1.context, com.example.godelreviews.R.drawable.star2))}

        val star4: ImageView = binding.star4
        binding.star4.setOnClickListener {
            Log.d("Star 4","Rate 4")
            star4.setImageDrawable(ContextCompat.getDrawable(star1.context, com.example.godelreviews.R.drawable.star2))}

        val star5: ImageView = binding.star5
        binding.star5.setOnClickListener {
            Log.d("Star 5","Rate 5")
            star5.setImageDrawable(ContextCompat.getDrawable(star1.context, com.example.godelreviews.R.drawable.star2))}

        return binding.root
    }

    private fun onRatingChanged(rating: Int){
        Log.d("AddPage", "onRatingChanged: $rating/5")
    }

    private fun getStarRating(): Int{
        TODO("Implement")
    }
}

現在看起來像這樣:

僅突出顯示第三顆星星的圖像

但我想像這樣標記其他明星:

突出顯示前三個的星星的圖像

因為這看起來像家庭作業,我不會告訴你怎么做,但你發布的說明真的很有幫助!

行動:

  • 循環星星(star & indexOfStar)
  • 設置顏色:(黃色表示選擇一個后面的開始,包括選擇一個(評級編號))

這就是說你需要遍歷所有的星星。 如果當前星是被選中的,或者在被選中的之前,則需要將其設置為黃色。 否則,您需要將其設置為灰色或其他。

每當當前選定的星發生變化時,您都需要執行此操作 - 因此,將此循環放在 function 中是有意義的,您可以在發生這種情況時調用。 這樣,您的點擊監聽器所要做的就是設置當前星級,並調用更新顯示的 function。

你已經有一個 function 聲明,看起來很像這樣:

private fun onRatingChanged(rating: Int){
    ...
}

它被稱為onRatingChanged並采用rating值。 您如何對該存儲進行評級(如有必要),然后遍歷您的星ImageView ,更新每個星號以顯示適當的星號? 然后,您的點擊偵聽器可以使用適當的評級值來調用它。

像這樣修改您的代碼,它可能對您有用-

    binding.star1.setOnClickListener {
        Log.d("Star 2","Rate 2")
        binding.star1.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))} 
  
    binding.star2.setOnClickListener {
        Log.d("Star 2","Rate 2")
        binding.star1.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star2.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))}
    
    binding.star3.setOnClickListener {
        Log.d("Star 3","Rate 3")
        binding.star1.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star2.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star3.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))}
    
    binding.star4.setOnClickListener {
        Log.d("Star 4","Rate 4")
        binding.star1.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star2.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star3.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star4.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))}


    binding.star5.setOnClickListener {
        Log.d("Star 5","Rate 5")
        binding.star1.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star2.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star3.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star4.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))
        binding.star5.setImageDrawable(ContextCompat.getDrawable(binding.star1.context, com.example.godelreviews.R.drawable.star2))}

    return binding.root
}

暫無
暫無

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

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