在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
相关产品推荐
相关产品推荐

