这是我参与「第四届青训营 」笔记创作活动的第5天。主要讲述我在青训营大项目中的工作。
我们的项目采用Kotlin语言,
网络请求库采用okhttp
数据库存储使用room
项目框架采用mvvm
数据从抖音开放平台获取
目录结构
然后我写的页面就是电视剧榜单以及粉丝和关注的人列表。这两个事情其实差不多,都是需要请求网络,存到数据库里,然后页面写activity和fragment和adapter并bind起来,页面用到recyclerview。
在组队的过程中,遇到了很好的队友,不仅经验很丰富,在我有问题的时候还都很热心地回答,帮我解决问题,真的备受鼓舞,从他们身上学到很多。
例子
实现
//粉丝
//用户关注的人
@GET(AcUrl.fans)
@Headers("Content-Type:application/json")
suspend fun discoveryFansList(
@Query("open_id") openId: String,
@Query("count") count: Int,
@Query("cursor") cursor: Int,
): ApiResponse<FollowerResp>
RecyclerView的每个元素用到这个类。
com.google.android.material.card.MaterialCardView
RankAdapter类.
class RankAdapter : BindingListAdapter<RankItem, RankAdapter.RankViewHolder>(diffUtil) {
private var onClickedAt = 0L
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RankViewHolder =
parent.binding<ItemRankBinding>(R.layout.item_rank).let(::RankViewHolder)
override fun onBindViewHolder(holder: RankViewHolder, position: Int) =
holder.bindPokemon(getItem(position))
inner class RankViewHolder constructor(
private val binding: ItemRankBinding
) : RecyclerView.ViewHolder(binding.root) {
init {
binding.root.setOnClickListener {
val position = bindingAdapterPosition.takeIf { it != NO_POSITION }
?: return@setOnClickListener
val currentClickedAt = SystemClock.elapsedRealtime()
if (currentClickedAt - onClickedAt > binding.transformationLayout.duration) {
// DetailActivity.startActivity(binding.transformationLayout, getItem(position))
// onClickedAt = currentClickedAt
}
}
}
fun bindPokemon(rankItem: RankItem) {
binding.item = rankItem
binding.executePendingBindings()
}
}
companion object {
private val diffUtil = object : DiffUtil.ItemCallback<RankItem>() {
override fun areItemsTheSame(oldItem: RankItem, newItem: RankItem): Boolean =
oldItem.name == newItem.name
override fun areContentsTheSame(oldItem: RankItem, newItem: RankItem): Boolean =
oldItem == newItem
}
}
}