class MyViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
fun bindata(text: SingleText){
itemView.title.text = text.title
itemView.desc.text = text.desc
}
}
Run Code Online (Sandbox Code Playgroud)
像这个代码一样,Kotlin在android扩展中有任何缓存吗?
当我反编译kotlin字节码
public final void bindata(@NotNull SingleText text) {
Intrinsics.checkParameterIsNotNull(text, "text");
((AppCompatTextView)this.itemView.findViewById(id.title)).setText((CharSequence)text.getTitle());
((AppCompatTextView)this.itemView.findViewById(id.desc)).setText((CharSequence)text.getDesc());
}
Run Code Online (Sandbox Code Playgroud)
这意味着当我在Adapter.onBindViewHolder()中调用binData时,它每次都会调用findViewById
这显着增加了性能损失,并且它没有达到布局重用的目的
Kotlin在ViewHolder的android扩展中有任何缓存逻辑吗?
android adapter kotlin android-recyclerview kotlin-android-extensions
public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
onBindViewHolder(holder, position);
}
Run Code Online (Sandbox Code Playgroud)
我知道当我们想更新RecyclerView项目中的某些视图而不是全部时,我可以使用
public final void notifyItemChanged(int position, Object payload) {
mObservable.notifyItemRangeChanged(position, 1, payload);
}
Run Code Online (Sandbox Code Playgroud)
如该代码所示,param是一个对象,但是为什么在Adapter中将其更改为list,而我必须使用它list.get(0)来找到我的有效载荷?
谢谢
我使用 TabView PageTabViewStyle 和 SwiftUI 来显示页面视图,当我滑动这个 TabView 时,我发现子视图会多次调用 onAppear 方法,有人可以告诉我为什么吗?
这是我的代码
import SwiftUI
struct Pageview: View {
@StateObject var vm = PageViewModel()
var body: some View {
VStack {
DragViewBar().padding(.top, 14)
TabView(selection: $vm.selectTabIndex) {
TextView(index: "0").tag(0)
TextView(index: "1").tag(1)
TextView(index: "2").tag(2)
TextView(index: "3").tag(3)
TextView(index: "4").tag(4)
TextView(index: "5").tag(5)
}
.tabViewStyle(PageTabViewStyle(indexDisplayMode: .never))
}
}
}
struct TextView: View {
let index: String
var body: some View {
VStack {
Text(index)
}
.onAppear { print(index) }
}
}
struct DragViewBar: View {
var body: …Run Code Online (Sandbox Code Playgroud) 我定义了一个这样的加载对话框
private val loadingDialog: LoadingDialog by lazy { LoadingDialog() }
Run Code Online (Sandbox Code Playgroud)
loadingDialog 是一个 DialogFragment
当我leakcanary用来观看我的应用程序时,我找到了loadingDialog原因记忆
有人能帮助我吗?
TabView(selection: $vm.selectedTab) {
PlanCard_PositiveDay(vm: vm).tag(0)
PlanCard_CountdownDay().tag(1)
PlanCard_Basalkcal().tag(2)
PlanCard_ActivityDiet().tag(3)
PlanCard_Schedule().tag(4)
PlanCard_WeightTarget().tag(5)
}
.tabViewStyle(PageTabViewStyle.init(indexDisplayMode: .never))
Run Code Online (Sandbox Code Playgroud)
我使用带有 PageTabViewStyle 的 TabView 来构建 pageView,但我想单击某个按钮来更改位置,而不是自动滚动以使用手指手势更改位置,因此我想禁用自动滚动,如何更新我的代码以实现此目的
谢谢!