我正在做基本的android开发人员教程,我正在开发dogglers应用程序:https://developer.android.com/codelabs/basic-android-kotlin-training-project-dogglers-app?continue=https://developer.android.com/courses/pathways/android-基础知识-kotlin-unit-2-pathway-3#codelab-https://developer.android.com/codelabs/basic-android-kotlin-training-project-dogglers-app#3
所有的测试都很顺利,但我发现了一个问题。在网格选项I中,项目卡片具有垂直/水平布局,而不是od网格布局。我做错了什么?我发现viewType总是0,而不是od 1、2或3,它们分别是水平、垂直和栅格的值。
我的适配器:
class DogCardAdapter(
private val context: Context?,
private var layout: Int,
private val dataset: List<Dog> = dogs
): RecyclerView.Adapter<DogCardAdapter.DogCardViewHolder>() {
// Done: Initialize the data using the List found in data/DataSource (POWYŻEJ ZAINICJALIZOWALEM)
/**
* Initialize view elements
*/
class DogCardViewHolder(view: View?, ViewType: Int): RecyclerView.ViewHolder(view!!) {
// DONE: Declare and initialize all of the list item UI components
val tvDogPhoto: ImageView = view!!.findViewById(com.example.dogglers.R.id.dog_photo)
val tvDogName: TextView = view!!.findViewById(com.example.dogglers.R.id.dog_name)
val tvDogAge: TextView = view!!.findViewById(com.example.dogglers.R.id.dog_age)
val tvDogHobbies: TextView = view!!.findViewById(com.example.dogglers.R.id.dog_hobbies)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DogCardViewHolder {
// DONE: Use a conditional to determine the layout type and set it accordingly.
// if the layout variable is Layout.GRID the grid list item should be used. Otherwise the
// the vertical/horizontal list item should be used.
// DONE Inflate the layout
/** val layoutType = if (viewType==Layout.GRID) {
R.layout.grid_list_item
}else{
R.layout.vertical_horizontal_list_item
}
val adapterLayout = LayoutInflater.from(parent.context).inflate(layoutType,parent,false)
*/
//layout = 3
val text = viewType.toString()
val duration = Toast.LENGTH_SHORT
val toast = Toast.makeText(parent.context, text, duration)
toast.show()
val adapterLayout = if (viewType==3) {
LayoutInflater.from(parent.context).inflate(com.example.dogglers.R.layout.grid_list_item,parent,false)
}else{
LayoutInflater.from(parent.context).inflate(com.example.dogglers.R.layout.vertical_horizontal_list_item,parent,false)
}
// DONE: Null should not be passed into the view holder. This should be updated to reflect
// the inflated layout.
return DogCardViewHolder(adapterLayout,layout)
}
override fun getItemCount(): Int = dataset.size // DONE: return the size of the data set instead of 0
override fun onBindViewHolder(holder: DogCardAdapter.DogCardViewHolder, position: Int) {
// DONE: Get the data at the current position
val dog = dataset[position]
// DONE: Set the image resource for the current dog
holder.tvDogPhoto.setImageResource(dog.imageResourceId)
// DONE: Set the text for the current dog's name
holder.tvDogName.text = dog.name
// DONE: Set the text for the current dog's age
val resources = context?.resources
holder.tvDogAge.text = resources?.getString(com.example.dogglers.R.string.dog_age, dog.age)
// Done: Set the text for the current dog's hobbies by passing the hobbies to the
// R.string.dog_hobbies string constant.
// Passing an argument to the string resource looks like:
// resources?.getString(R.string.dog_hobbies, dog.hobbies)
holder.tvDogHobbies.text = resources?.getString(com.example.dogglers.R.string.dog_hobbies, dog.hobbies)
}
}
有人能帮我吗?
我不知道为什么DogCardViewHolder有两个参数。在截至2022年6月20日的原始源代码中,代码为ff:
class DogCardViewHolder(view: View?): RecyclerView.ViewHolder(view!!) {
...
}
因此,在您的onCreateViewHolder类中,返回的DogCardViewHolder()应该包含基于@Tenfri04提到的布局var的适当布局。
我将编写如下代码:
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DogCardViewHolder {
val layoutType = when(layout) {
Layout.GRID -> {
R.layout.grid_list_item
}
else -> {
R.layout.vertical_horizontal_list_item
}
}
val adaptTo = LayoutInflater.from(parent.context).inflate(layoutType, parent, false)
return DogCardViewHolder(adaptTo)
}
轻触(与功能无关):注意,我在java/com/example/dogglers/const/Layout中使用了写入源代码的常量。千吨级
直接将3编码到if/time条件中可能会令人困惑。
适配器构造函数中定义的布局属性是用来确定要充气的布局的属性。您使用了viewType,当同一适配器中存在不同类型的视图时,适配器使用该值,例如如果一个列表项类型是子节标题。
所以,替换
val adapterLayout = if (viewType==3) //...
具有
val adapterLayout = if (layout == 3) //...
不幸的是,这个代码实验室中的源代码也助长了一些不良做法。我不知道他们是否把它们放进去,看看你是否能发现并修复它们,或者这只是一个草率的设计。
>
此适配器连接到具有上下文的RecyclerView。它有一个可为null的上下文属性是没有意义的,因为它在没有上下文的情况下永远不存在,没有上下文就没有用处,所以没有理由让它为null,然后让所有那些nullsafe属性都为null 在BindViewHolder中调用。
DogCardViewHolder的构造函数接受一个可为null的view参数,并在超级构造函数调用中立即断言该参数为非null。这是荒谬的。它无缘无故地将应该是编译错误的内容推到运行时崩溃,并导致一堆毫无意义的<代码> 函数内部的调用。
我正在尝试使用Hybris,但无法访问Wiki。我的朋友向我提供了该应用程序的试用版,最近我在阅读论坛时遇到了下面两个文档的名称,这可以帮助我学习。 谁能告诉我怎么才能得到这两个? SAP HY400:SAP Hybris商务开发人员培训–第1部分–Hybris v6。2. SAP HY410:SAP Hybris商务开发人员培训–第2部分–Hybris v6。2. 非常感谢!
随着微服务架构、云计算、单页应用和响应式设计的兴起,Web前端技术发展迅速。当前在网站开发中使用现代前端技术已经是基本形态,你可以基于Canvas、WebGL来开发二三维的H5游戏,也可以使用React Native等框架来开发新一代的移动APP,还可以使用Nodejs等框架来开发桌面应用,还可以开发ChromeAPP(PWA)、微信小程序、以及这几年很流行的WebVR和AR。 对于GIS行业来说
开发人员协议 请务必认真阅读和理解本《360浏览器应用开放平台开发人员协议》(以下简称"协议")中规定的所有权利和限制。在您参与360浏览器应用开放平台并使用应用中心分发产品时,您首先应接受本《协议》条款,如果您不接受本协议或违反了协议,奇虎360有权采取以下措施:驳回应用审核、下线产品、删除帐户、拒绝访问等。 本《协议》是开发人员与北京奇虎科技有限公司(下称"奇虎360")之间关于利用360浏览
Project V Project V 由以下几部分组成: V2Ray 核心: v2ray.com/core V2Ray 手册: v2ray.com 周边项目: 详见客户端 V2Ray 项目组 V2Ray 项目组最初是为了 V2Ray 核心的开发而建立,现在已推广到整个 Project V 生态环境。我们欢迎你加入组织参与开发。当然你也选择可以使用自己的 V2Ray 之外的环境。 加入 V2Ray
本文向大家介绍测试人员和开发人员区别?相关面试题,主要包含被问及测试人员和开发人员区别?时的应答技巧和注意事项,需要的朋友参考一下 ①人员不同 测试:开发人员和测试人员 开发:只有开发人员 ②所处阶段不同 测试:贯穿整个软件开发生命周期 调试:在软件开发编码阶段以及测试过程中对BUG进行调试 ③对bug处理结果不同 测试:只找出错误,不解决 调试:找出错误并解决
Subversion 中的分支、标记和合并 虽然很多开发团队都使用版本控制系统管理代码变更,但当多个开发人员并行地使用不同的代码库进行编码时,还是会出现问题的。在本期的 让开发自动化 中,自动化专家 Paul Duvall 展示了如何运用开源的、免费的 Subversion 版本控制系统来有效地进行标记、分支和合并。 说到源代码分支,可以将大多数的软件开发团队大致划分为两大阵营:有些是根本不分支;