回收器视图仅显示一件物品

问题描述 投票:0回答:1

我正在尝试使用回收器视图将数据写入文件,数据正在传递,但是一旦新数据传递,它就会被新数据覆盖,而它应该显示新数据和旧数据。我可以在文件中看到以前收集的所有数据,但我希望回收器视图也显示所有数据。这是我的代码。

package com.example.pigdicegame

import android.content.Intent
import android.os.Bundle
import android.view.View
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.DefaultItemAnimator
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import java.io.*
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
import java.util.*

const val LeaderBoard_File = "LeaderBoard.txt"

class leaderboard : AppCompatActivity() {

   private lateinit var btnSwitchBack: Button
   private lateinit var recyclerView: RecyclerView
   private var leaderList = ArrayList<LeaderBoardItem>()
   private lateinit var LeaderBoardadapter: LeaderBoardadapter

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

       btnSwitchBack = findViewById(R.id.btnSwitchBack)
       recyclerView = findViewById(R.id.leaderboardRecycler)

       LeaderBoardadapter = LeaderBoardadapter(leaderList)
       recyclerView.layoutManager = LinearLayoutManager(applicationContext)
       recyclerView.itemAnimator = DefaultItemAnimator()
       recyclerView.adapter = LeaderBoardadapter

       try {
           val extras = intent.extras
           if (extras != null && extras.containsKey("Score") && extras.containsKey("CompScore")) {
               readLogData()

               val score: Int = extras.getInt("Score", 0)
               val compScore: Int = extras.getInt("CompScore", 0)

               val formatter =
                   DateTimeFormatter.ofPattern("dd-MMMM-yyyy ", Locale.getDefault())
               val formattedDate = LocalDateTime.now().format(formatter)

               val date = LocalDate.now()

               // Append the data to the file
               val file = File(filesDir, LeaderBoard_File)

               try {
                   val fileWriter = FileWriter(file, true)
                   val bufferedWriter = BufferedWriter(fileWriter)

                   bufferedWriter.write("You : $score  $formattedDate\nComputer : $compScore  $formattedDate\n")
                   bufferedWriter.close()

                   // Add the new entry to the list
                   leaderList.add(LeaderBoardItem(score, compScore, date))

                   // Sort the list in reverse order (newest game first)
                   leaderList.reverse()

                   // Notify the adapter that the data has changed
                   LeaderBoardadapter.notifyDataSetChanged()
               } catch (e: IOException) {
                   e.printStackTrace()
               }
           }
       } catch (e: Exception) {
           e.printStackTrace()
       }
   }


   private fun readLogData() {
       try {
           val file = File(filesDir, LeaderBoard_File)
           if (file.exists()) {
               // Clear the existing list before adding data
               //leaderList.clear()

               val lines = file.readText().split("\n")

               for (line in lines) {
                   println("Line: $line")
                   val parts = line.split(":")
                   if (parts.size >= 2) {
                       val scoreAndDate = parts[1].trim().split(" ")
                       if (scoreAndDate.size == 2) {
                           val leaderItem = LeaderBoardItem(scoreAndDate[0].toInt(), 0, LocalDate.parse(scoreAndDate[1]))
                           leaderList.add(leaderItem)
                       }
                   }
               }

               // Sort the list in reverse order (newest game first)
               leaderList.reverse()

               // Notify the adapter that the data has changed
               LeaderBoardadapter.notifyDataSetChanged()
           }
       } catch (e: Exception) {
           e.printStackTrace()
       }
   }


   fun btnSwitchBackOnClick(v: View) {
       val intent = Intent(this, MainActivity::class.java)
       btnSwitchBack.isEnabled = false
       startActivity(intent)
   }
}

我希望所有数据都显示在回收器视图中。但它一次只显示一项,但它应该显示一个列表。

android android-intent android-recyclerview
1个回答
0
投票

首先检查列表中的数据。您的列表中有多少对象。第二次检查并为 Adapter getItemCount 提供 itemList.size,第三次检查您的单个项目 xml rootView 高度是否为 Wrapcontent。

© www.soinside.com 2019 - 2024. All rights reserved.