我在这里要做的是更改来自 json
占位符 api https://jsonplaceholder.typicode.com/posts 的前 20 个帖子的颜色.
任何关于如何做到这一点的想法或建议都会很棒。
这是主 Activity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
val retrofit= Retrofit.Builder()
.baseUrl("https://jsonplaceholder.typicode.com")
.addConverterFactory(create())
.build()
val api = retrofit.create(ApiService:: class.java)
api.fetchAllPosts().enqueue(object : Callback<List<Post>> {
override fun onResponse(call: Call<List<Post>>, response: Response<List<Post>>) {
showData(response.body()!!)
Log.d("jv", "onResponse")
}
override fun onFailure(call: Call<List<Post>>, t: Throwable) {
Log.d("jv", "onFailure")
}
})
}
private fun showData(posts: List<Post>) {
recyclerView.apply {
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = PostsAdapter(posts)
}
}
这是适配器
class PostsAdapter(private val posts: List<Post>) : RecyclerView.Adapter<PostsAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.post_row, parent, false)
return ViewHolder(view)
}
override fun getItemCount() = posts.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.userId.text= "Userid:" + posts[position].userId.toString()
holder.id1.text= "id:" + posts[position].id.toString()
holder.title.text= "Title:" + posts[position].title
holder.body.text= "Body:" + posts[position].body
}
class ViewHolder (itemView:View): RecyclerView.ViewHolder(itemView){
val userId: TextView = itemView.userid
val id1: TextView = itemView.id1
val title: TextView = itemView.title
val body: TextView = itemView.body
}
}
这是 post_row 布局
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="16dp"
android:src="@drawable/ic_check_circle_black_24dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent">
</ImageView>
<TextView
android:id="@+id/id1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textColor="#000"
android:textSize="32sp"
app:layout_constraintBottom_toTopOf="@+id/userid"
app:layout_constraintLeft_toRightOf="@+id/photo"
app:layout_constraintTop_toTopOf="parent"
tools:text="1" />
<TextView
android:id="@+id/userid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textColor="#000"
android:textSize="32sp"
app:layout_constraintBottom_toTopOf="@+id/title"
app:layout_constraintLeft_toRightOf="@+id/photo"
app:layout_constraintTop_toBottomOf="@+id/id1"
tools:text="1" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textColor="#000"
android:textSize="32sp"
app:layout_constraintBottom_toTopOf="@+id/body"
app:layout_constraintLeft_toRightOf="@+id/photo"
app:layout_constraintTop_toBottomOf="@+id/userid"
tools:text="JV" />
<TextView
android:id="@+id/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="8dp"
android:textColor="#000"
android:textSize="32sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/photo"
app:layout_constraintTop_toBottomOf="@+id/title"
tools:text="JV" />
</androidx.constraintlayout.widget.ConstraintLayout>
最佳答案
将 id 添加到您的约束布局
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
定义 2 种颜色:第一种用于 1-20 项,第二种用于其余
<color name="colorHighlitedPost">...</color>
<color name="colorNormalPost">...</color>
在 Recycler Adapter 中设置颜色
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.userId.text = "Userid:" + posts[position].userId.toString()
holder.id1.text = "id:" + posts[position].id.toString()
holder.title.text = "Title:" + posts[position].title
holder.body.text = "Body:" + posts[position].body
val context = holder.rootLayout.context
if (position < 20) {
holder.rootLayout.setBackgroundColor(
ContextCompat.getColor(
context,
R.color.colorHighlitedPost
)
)
} else {
holder.rootLayout.setBackgroundColor(
ContextCompat.getColor(
context,
R.color.colorNormalPost
)
)
}
}
关于android - 从 API 更改第 20 篇文章的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58452258/