java - Android数据绑定导致包含布局问题
问题描述
你好希望你一切都好。我将我的项目从旧版本迁移到最新版本,即 29。我解决了所有错误。问题是我无法解决工具栏错误。
<?xml version="1.0" encoding="utf-8"?>
<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="controller"
type="com.cvvm.Controller" />
<variable
name="menu"
type="java.lang.Integer" />
<variable
name="itemClickListener"
type="androidx.appcompat.widget.Toolbar.OnMenuItemClickListener" />
<import type="com.bonnti.misc.NavigationClickListener" />
</data>
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@drawable/btn_red_gradient"
android:title="@{controller.title}"
app:showBackButton="@{controller.previous != null}"
app:itemClickListener="@{itemClickListener}"
app:navigationClickListener="@{(NavigationClickListener)controller}"
app:menu="@{menu}"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
</layout>
我把它包括在其他这样的布局中
<?xml version="1.0" encoding="utf-8"?>
<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="controller"
type="com.bonnti.screens.combthru.combthruitem.ItemCombthruController" />
<import type="com.bonnti.R" />
<import type="com.bonnti.misc.utils.TextUtils" />
</data>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/toolbar_item_combthru"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:controller="@{controller}" />
<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginTop="4dp"
android:layout_marginRight="@dimen/size_2dp"
android:clickable="true"
android:onClick='@{controller::onThreeDotsClick}'
android:padding="@dimen/size_10dp"
android:visibility='@{controller.isThreeDotsVisible}'>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dp"
android:src="@drawable/ic_point_first_white" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dp"
android:src="@drawable/ic_point"
android:tint="@color/white" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="6dp"
android:src="@drawable/ic_point"
android:tint="@color/white" />
</LinearLayout>
</RelativeLayout>
<include
android:id="@+id/list"
layout="@layout/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/toolbar_item_combthru"
android:layout_marginBottom="@dimen/size_40dp"
app:adapter="@{controller.adapter}"
app:loadMoreListener="@{controller}" />
<RelativeLayout
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@color/white"
android:padding="@dimen/size_10dp"
android:visibility='@{controller.isCommentMode}'>
<ImageView
android:id="@+id/ic_im"
android:layout_width="20dp"
android:layout_height="20dp"
android:scaleType="centerInside"
app:srcCompat="@drawable/ic_combthru_comments" />
<EditText
android:id="@+id/et_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="@dimen/size_10dp"
android:layout_marginRight="@dimen/size_10dp"
android:layout_toStartOf="@+id/ic_sent"
android:layout_toEndOf="@+id/ic_im"
android:background="@null"
android:hint="@string/comment"
android:textColor="@color/textColor"
android:textSize="@dimen/size_14sp" />
<ImageButton
android:id="@+id/ic_sent"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_alignParentRight="true"
android:background="@null"
android:onClick='@{controller::sentComment}'
android:scaleType="centerInside"
app:srcCompat="@drawable/ic_comb_sendcomment" />
</RelativeLayout>
</RelativeLayout>
</layout>
public abstract class Controller<B extends ViewDataBinding> extends SerializableController<B> {
@Override Strategy<B> createStrategy() {
return new FragmentStrategy<>(this);
}
}
public abstract class BonntiController<B extends ViewDataBinding> extends Controller<B> implements NavigationClickListener {
private static final String TAG = BonntiController.class.getSimpleName();
public void onMediaSelected(String uri) {
// stub
Log.w(TAG, "onMediaSelected: activity result ignored");
}
protected void onBroadcastReceived(Intent intent){
// stub
Log.w(TAG, "onBroadcastReceived: activity result ignored");
}
//back arrow click
@Override public void onNavigationClick() {
back();
}
}
public class ItemCombthruController extends BonntiController<LayoutItemCombthruBinding> implements RemoveCommentListener,
LoadMoreListener {
public final Combthru combthru;
public BaseAdapter<BaseVM> adapter = new BaseAdapter<>(new ArrayList<>());
public ObservableBoolean isCommentMode = new ObservableBoolean();
public ItemCombthruController(Combthru combthru) {
Log.d("BBB", "YES!!!");
this.combthru = combthru;
adapter.add(new ItemCombthruTopVM(combthru, this));
if (combthru.comments != null && combthru.comments.size() != 0) {
for (Combthru.Comment comment : combthru.comments) {
adapter.add(new CombthruCommentVM(this, comment, this));
}
}
isCommentMode.set(true);
}
}
我的问题是它给了我以下错误。我已经尝试了 stackoverflow 中的所有内容(清理项目,invaidate 缓存/重启,重建项目,包括 kotlin 等)并且问题没有解决。当我按下 app:controller="@{controller}" 时,它会说“找不到要执行的声明”。任何帮助将不胜感激。提前致谢。
****/ 数据绑定错误 ****msg:在 com.bonnti.databinding.ToolbarBinding 上找不到参数类型为 com.bonnti.screens.combthru.combthruitem.ItemCombthruController 的属性“app:controller”的设置器。文件:D:\bonnti-android-gitlab\app\src\main\res\layout\layout_item_combthru.xml
解决方案
您还需要将包含的布局更改为数据绑定布局。即,您需要使用与父布局相同的布局标签来包装包含的布局。
推荐阅读
- r - 无法使用 Rvest 提取图像链接
- .net - 将实体映射到 DTO 时对 AsNoTracking 的影响
- javascript - 使用 RNFetchBlob.fs.cp 和从 react-native-document-picker 获取的 uri 导致错误
- sql-server - 如何将行转换为单列?
- python - 读取多个 csv 文件(大小 mxm)并加载为 n 维数组(大小 nxmxm)(不连接)
- python - 从 GoogleDriveFile pydrive 的内容中获取类似对象的文件
- node.js - 关于如何从另一个 nodejs 脚本调用无服务器 shell 命令的任何想法
- apigee - Apigee 休息端点路径映射到自定义路径
- apache-poi - 如何超链接包含 Excel 特殊字符的 SMB 文件
- mysql - REST API 的服务器与无服务器