You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Android Studio中逐球展示跑分数值列表并处理指定JSON响应

在Android Studio中逐球展示跑分数值的实现方案

1. 定义数据模型类

首先根据JSON结构创建对应的数据类,方便后续解析:

data class MatchResponse(
    val recent_overs_repr: List<Over>
)

data class Over(
    val overnumber: Int,
    val ball_repr: List<String>
)

2. 解析JSON响应

使用Gson库解析JSON字符串为数据对象:

// 替换为你的JSON响应字符串
val jsonString = """{"recent_overs_repr": [{"overnumber":15,"ball_repr":["r0","r2","r1","e1,wd","w","r0","r1"]},{"overnumber":14,"ball_repr":["r1","r0","b6","w","r0","r0"]},{"overnumber":13,"ball_repr":["b4","r0","r1","r1","r0","r1"]}]}"""

val gson = Gson()
val matchResponse = gson.fromJson(jsonString, MatchResponse::class.java)
val oversList = matchResponse.recent_overs_repr

3. 配置UI布局

主布局(activity_main.xml)

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

轮次项布局(over_item.xml)

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp">

    <TextView
        android:id="@+id/tvOverNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:textStyle="bold"/>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvBalls"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"/>
</LinearLayout>

单球项布局(ball_item.xml)

<TextView
    android:id="@+id/tvBallScore"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="8dp"
    android:textSize="16sp"/>

4. 实现适配器

单球适配器(BallAdapter.kt)

class BallAdapter(private val balls: List<String>) : RecyclerView.Adapter<BallAdapter.BallViewHolder>() {

    inner class BallViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvBallScore: TextView = itemView.findViewById(R.id.tvBallScore)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BallViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.ball_item, parent, false)
        return BallViewHolder(view)
    }

    override fun onBindViewHolder(holder: BallViewHolder, position: Int) {
        val ball = balls[position]
        holder.tvBallScore.text = convertBallToReadableText(ball)
    }

    override fun getItemCount(): Int = balls.size

    private fun convertBallToReadableText(ball: String): String {
        return when {
            ball.startsWith("r") -> "跑分: ${ball.substring(1)}"
            ball.startsWith("b") -> "坏球得分: ${ball.substring(1)}"
            ball == "w" -> "出局"
            ball.contains("wd") -> {
                val parts = ball.split(",")
                "宽球 +${parts[0].substring(1)}"
            }
            else -> ball
        }
    }
}

轮次适配器(OverAdapter.kt)

class OverAdapter(private val overs: List<Over>) : RecyclerView.Adapter<OverAdapter.OverViewHolder>() {

    inner class OverViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
        val tvOverNumber: TextView = itemView.findViewById(R.id.tvOverNumber)
        val rvBalls: RecyclerView = itemView.findViewById(R.id.rvBalls)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): OverViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.over_item, parent, false)
        return OverViewHolder(view)
    }

    override fun onBindViewHolder(holder: OverViewHolder, position: Int) {
        val over = overs[position]
        holder.tvOverNumber.text = "第 ${over.overnumber} 轮"
        holder.rvBalls.layoutManager = LinearLayoutManager(holder.itemView.context, LinearLayoutManager.HORIZONTAL, false)
        holder.rvBalls.adapter = BallAdapter(over.ball_repr)
    }

    override fun getItemCount(): Int = overs.size
}

5. 在Activity中初始化RecyclerView

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

        val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)
        recyclerView.adapter = OverAdapter(oversList)
    }
}

6. 添加依赖

在模块级build.gradle中添加必要依赖:

dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.3.2'
    implementation 'com.google.code.gson:gson:2.10.1'
}

内容的提问来源于stack exchange,提问作者Vishal Rastogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 08:05:19