我正在尝试使用回收器视图将数据写入文件,数据正在传递,但是一旦新数据传递,它就会被新数据覆盖,而它应该显示新数据和旧数据。我可以在文件中看到以前收集的所有数据,但我希望回收器视图也显示所有数据。这是我的代码。
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)
}
}
我希望所有数据都显示在回收器视图中。但它一次只显示一项,但它应该显示一个列表。
首先检查列表中的数据。您的列表中有多少对象。第二次检查并为 Adapter getItemCount 提供 itemList.size,第三次检查您的单个项目 xml rootView 高度是否为 Wrapcontent。