Binding
Binding copied to clipboard
Simple API implement DataBinding and ViewBinding. 简单的 API 实现 DataBinding 和 ViewBinding,欢迎 star
Fatal Exception: java.lang.IllegalStateException onGetLayoutInflater() cannot be executed until the Fragment is attached to the FragmentManager. androidx.fragment.app.Fragment.getLayoutInflater (Fragment.java:1673) androidx.fragment.app.Fragment.getLayoutInflater (Fragment.java:1639) com.hi.dhl.binding.databind.FragmentDataBinding.getValue (FragmentDataBinding.java:35) 报错 FragmentDataBinding 行数: 35,但使用的Fragment(layoutId: Int) 构造方法, 按常理:在onViewCreated() 方法后调用, FragmentDataBinding...
`ActivityViewBinding` 里是在委托首次赋值时调用的`setContentView`,根据使用习惯的不同,会使得调用时机不明确:例如可能在数据请求返回之后才遇到首次操作UI的时机,那么在此之前委托的属性都没被获取、不会调用`setContentView`,使得页面一直显示空白。 对于类似的情况,是不是应该监听Activity的生命周期,主动在 `ON_CREATE` 事件里调用`setContentView`?
比如在BRAVH中使用viewbind, 不会自己去写viewholder, 是直接使用adapter 提供的 BaseViewHolder, 照着文档中的例子写,编译通不过
FragmentDataBinding viewBinding lifecycleOwner是否应该使用viewLifecycleOwner更为恰当呢? [参照architecture-components-samples代码-1](https://github.com/android/architecture-components-samples/blob/2c19434f89e925b8bea56366faa0a197c5b90b96/GithubBrowserSample/app/src/main/java/com/android/example/github/ui/search/SearchFragment.kt#L82) [参照architecture-components-samples代码-2](https://github.com/android/architecture-components-samples/blob/2c19434f89e925b8bea56366faa0a197c5b90b96/GithubBrowserSample/app/src/main/java/com/android/example/github/ui/repo/RepoFragment.kt#L99) [参照architecture-components-samples代码-3](https://github.com/android/architecture-components-samples/blob/2c19434f89e925b8bea56366faa0a197c5b90b96/GithubBrowserSample/app/src/main/java/com/android/example/github/ui/user/UserFragment.kt#L103)
先是报错 FragmentManager is already executing transactions 然后我改了FragmentStateAdapter的条件 报错变成了Fragment no longer exists 但是FragmentStateAdapter saveState是final方法 和viewpager2 也是final class 所以我还原代码kotlin-android-extensions的写法就没有报错了 我应用的UI是下面三个tab,一个tab用viewpager2包两个 Fragment 在tab上切来切去就报错
代码结构: Activity -> 上下两个 Fragment (同一个类型的,2个实例) 具体使用: ``` class ImageAdFragment : AdFragment(R.layout.fragment_image_ad) { private val binding by viewbind() override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) Utils.log("加载图片${model.url}") Glide.with(binding.ivImg.context).asBitmap().load(File(model.url)).into(binding.ivImg) }...
Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.hi.dhl.binding.viewbind.ActivityViewBinding.getValue(ActivityViewBinding.kt:33)
val binding: ActvityStartBinding by viewbind() 引用 viewbind()会报红线提示下面的 Property delegate must have a 'getValue(Nothing?, KProperty*>)' method. None of the following functions are suitable. getValue(Activity, KProperty) defined in com.hi.dhl.binding.viewbind.ActivityViewBinding