小编Wer*_*erb的帖子

ViewHolder中的kotlin-android-extensions

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

14
推荐指数
2
解决办法
7061
查看次数

为什么RecyclerView'onBindViewHolder中的有效载荷是一个列表?

 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)来找到我的有效载荷?

谢谢

java android recycler-adapter android-recyclerview

9
推荐指数
1
解决办法
1136
查看次数

iOS14.2中的SwiftUI PageTabView会多次调用ChildView的onAppear方法

我使用 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)

uitabview ios swiftui ios14

7
推荐指数
1
解决办法
2577
查看次数

为什么kotlin懒惰会导致android中的内存泄漏?

我定义了一个这样的加载对话框

private val loadingDialog: LoadingDialog by lazy { LoadingDialog() }
Run Code Online (Sandbox Code Playgroud)

loadingDialog 是一个 DialogFragment

当我leakcanary用来观看我的应用程序时,我找到了loadingDialog原因记忆

有人能帮助我吗?

android memory-leaks kotlin

6
推荐指数
1
解决办法
620
查看次数

iOS14 SwiftUI 如何在 TabView 上禁用滚动

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,但我想单击某个按钮来更改位置,而不是自动滚动以使用手指手势更改位置,因此我想禁用自动滚动,如何更新我的代码以实现此目的

谢谢!

swiftui swiftui-tabview

6
推荐指数
1
解决办法
1062
查看次数