每次我的应用程序崩溃,因为它无法在类路径中找到Landroidx/constraintlayout/widget/R $ styleable.我试图重建,使缓存无效,但它总是在运行时给我相同的错误.
我尝试了1.1.2和1.1.3两个版本.而且有趣的是:当使用1.1.3时,androidX Jetifier只是强制使用1.1.2,你可以从gradle报告中看到
Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:651)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
at android.view.LayoutInflater.inflate(LayoutInflater.java:496)
at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:141)
at com.github.sharetaxi.LoginActivity.onCreate(LoginActivity.kt:24)
at android.app.Activity.performCreate(Activity.java:7050)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2809)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2931)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1620)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6701)
at …Run Code Online (Sandbox Code Playgroud) 例如,您有一个适配器,并且在onBindViewHolder方法中,您将OnClickListener设置为某些视图(并根据视图位置执行某些操作).您应该分配final方法onBindViewHolder的位置参数,以便可以从onClick()访问它.
更改数据集(删除或添加列表中的项目)后,您调用onItemInserted或onItemRemoved,这实际上是在recyclerview中添加/删除视图,但它不刷新其他视图,因此当您单击邻居视图项时,它将打开一个屏幕或显示索引无效的数据.为了避免这种情况,我基本上调用notifyDatasetChanged来调用onBind到所有可见视图并删除/添加一些视图.
因此,如何刷新其他视图,当你调用notifyItemInserted /删除或如何使用这些methots适当的工作吗?
我有2个布局:一个用于v19 +,另一个用于早期版本.它们包含具有不同ID的不同视图.我怎么能说我想要使用两种布局的Android DataBinding框架?它仅为一个布局生成视图(随机选择).
layout/temp_view.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="block"
type="ru.temp.model.content.blocks.WebMediaBlock" />
<import type="ru.temp.model.Types.ProviderTypes" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:background="@android:color/white">
<ImageView
android:id="@+id/provider"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:paddingTop="@dimen/size5"
android:src="@{ProviderTypes.fromString(block.provider).getResId()}" />
</FrameLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
layout-v19/temp_view.xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="block"
type="ru.temp.model.content.blocks.WebMediaBlock" />
<import type="ru.temp.model.Types.ProviderTypes" />
</data>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:background="@android:color/white">
<ru.temp.utils.EmbedView
android:id="@+id/media_embed"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ru.temp.structure.static_material.CreditsView
android:id="@+id/credits_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</FrameLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)
更新:
最后我发现了问题的根源.我不知道为什么但是在使用minSdkVersion 21时它不会生成*BindingImpl文件.如果指定早期版本它就像@yigit那样工作