找不到〜ItemBinding〜的设置器,该设置器接受参数类型'androidx.lifecycle.LiveData <

如何解决找不到〜ItemBinding〜的设置器,该设置器接受参数类型'androidx.lifecycle.LiveData <

找不到用于的设置器 接受参数类型 'androidx.lifecycle.LiveData ' 如果绑定适配器提供了设置器,请检查适配器是否为 正确注释并且参数类型匹配。

我已经逐行浏览了我的应用程序超过两天了。我使用Google提供的“ BasicSample” Android Room应用程序来模拟自己的应用程序,但是当我将其包含在dog_fragment.xml中时出现此错误

<include
 layout="@layout/dog_item"
 app:product="@{dogViewModel.dog}" />

“ dog_item”布局(dog_item.xml)用于显示狗的列表,当您单击它时,它将带您进入狗详细信息屏幕(dog_fragment.xml)。没有它,一切都将运行良好,但是它会丢失“狗”图块以进入详细信息屏幕,并且只会显示chew_toys的列表。

dog_fragment.xml

<?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">
  
  <data>
    <import type="android.view.View" />
    
    <variable
      name="isLoading"
      type="boolean" />
    
    <variable
      name="dogViewModel"
      type="the_derek.dogstuff.viewmodel.DogViewModel" />
  </data>
  
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/cardview_light_background"
    android:orientation="vertical">
    
    <include
      layout="@layout/dog_item"
      app:product="@{dogViewModel.dog}" />
    
    <FrameLayout
      android:layout_width="match_parent"
      android:layout_height="match_parent">
      
      <TextView
        android:id="@+id/tv_loading_chew_toys"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/loading_chew_toys"
        app:visibleGone="@{isLoading}" />
      
      <FrameLayout
        android:id="@+id/chew_toys_list_wrapper"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        
        <androidx.recyclerview.widget.RecyclerView
          android:id="@+id/chew_toy_list"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:contentDescription="@string/cd_chew_toys_list"
          app:layoutManager="LinearLayoutManager"
          app:visibleGone="@{!isLoading}" />
      </FrameLayout>
    </FrameLayout>
  </LinearLayout>
</layout>

DogFragment.java

public class DogFragment extends Fragment {

 private static final String TAG = "\t\tDogFragment";
 private static final String KEY_DOG_ID = "dog_id";

 private final ChewToyClickCallback mChewToyClickCallback =
   chewToy -> {
    // no-op
   };
 private DogFragmentBinding mBinding;
 private ChewToyAdapter mChewToyAdapter;

 public static DogFragment forDog(int dogId) {
  DogFragment fragment = new DogFragment();
  Bundle args = new Bundle();
  args.putInt(KEY_DOG_ID,dogId);
  fragment.setArguments(args);
  return fragment;
 }

 @Nullable
 @Override
 public View onCreateView(
   @NonNull LayoutInflater inflater,@Nullable ViewGroup container,@Nullable Bundle savedInstanceState) {
  mBinding = DataBindingUtil.inflate(inflater,R.layout.dog_fragment,container,false);
 
  mChewToyAdapter = new ChewToyAdapter(mChewToyClickCallback);
  mBinding.chewToyList.setAdapter(mChewToyAdapter);
  return mBinding.getRoot();
 }

 @Override
 public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
  DogViewModel.Factory factory =
    new DogViewModel.Factory(
      requireActivity().getApplication(),requireArguments().getInt(KEY_DOG_ID));
  final DogViewModel model =
    new ViewModelProvider(this,factory).get(DogViewModel.class);

  mBinding.setLifecycleOwner(getViewLifecycleOwner());
  mBinding.setDogViewModel(model);

  subscribeToModel(model);
 }

 private void subscribeToModel(final DogViewModel model) {
  model
    .getChewToys()
    .observe(
      getViewLifecycleOwner(),chewToyEntities -> {
       if (chewToyEntities != null) {
        mBinding.setIsLoading(false);
        mChewToyAdapter.submitList(chewToyEntities);
       } else {
        mBinding.setIsLoading(true);
       }
      });
 }

 @Override
 public void onDestroyView() {
  mBinding = null;
  mChewToyAdapter = null;
  super.onDestroyView();
 }
}

DogViewModel.java

public class DogViewModel extends AndroidViewModel {

  private static final String TAG = "\t\tDogViewModel";
  private final LiveData<DogEntity> mObservableDog;
  private final LiveData<List<ChewToyEntity>> mObservableChewToys;

  public DogViewModel(
      @NonNull Application application,DataRepository repository,final int dogId) {
    super(application);
    mObservableChewToys = repository.loadChewToysById(dogId);
    mObservableDog = repository.loadDog(dogId);
  }

  public LiveData<List<ChewToyEntity>> getChewToys() {
    return mObservableChewToys;
  }

  public LiveData<DogEntity> getDog() {
    return mObservableDog;
  }

  public static class Factory extends ViewModelProvider.NewInstanceFactory {

    @NonNull private final Application mApplication;

    private final int mDogId;

    private final DataRepository mRepository;

    public Factory(@NonNull Application application,int dogId) {
      mApplication = application;
      mDogId = dogId;
      mRepository = ((DogApp) application).getRepository();
    }

    @SuppressWarnings("unchecked")
    @Override
    @NonNull
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
      return (T) new DogViewModel(mApplication,mRepository,mDogId);
    }
  }
}

BindingAdapters.java

public class BindingAdapters {
  @BindingAdapter("visibleGone")
  public static void showHide(View view,boolean show) {
    view.setVisibility(show ? View.VISIBLE : View.GONE);
  }
}

DogClickCallback.java

public interface DogClickCallback {
 void onClick(Dog dog);
}

dao查询

@Query("select * from dog_table where id = :dogId")
LiveData<DogEntity> loadDog(int dogId);

DogAdapter.java

public class DogAdapter extends RecyclerView.Adapter<DogAdapter.DogViewHolder> {
 private static final String TAG = "\t\tDogAdapter";

 @Nullable private final DogClickCallback mDogClickCallback;
 List<? extends Dog> mDogList;

 public DogAdapter(@Nullable DogClickCallback clickCallback) {
   Log.i(TAG,"DogAdapter: public constructor");
   mDogClickCallback = clickCallback;
   setHasStableIds(true);
 }

 public void setDogList(final List<? extends Dog> dogList) {
   if (mDogList == null) {
    mDogList = dogList;
    notifyItemRangeInserted(0,dogList.size());
   } else {
    DiffUtil.DiffResult result =
       DiffUtil.calculateDiff(
          new DiffUtil.Callback() {
            @Override
            public int getOldListSize() {
             return mDogList.size();
            }
            @Override
            public int getNewListSize() {
             return dogList.size();
            }
            @Override
            public boolean areItemsTheSame(int oldItemPosition,int newItemPosition) {
             return mDogList.get(oldItemPosition).getId()
                == dogList.get(newItemPosition).getId();
            }
            @Override
            public boolean areContentsTheSame(int oldItemPosition,int newItemPosition) {
             Dog newDog = dogList.get(newItemPosition);
             Dog oldDog = mDogList.get(oldItemPosition);
             return newDog.getId() == oldDog.getId()
                && TextUtils.equals(newDog.getName(),oldDog.getName());
            }
          });
    mDogList = dogList;
    result.dispatchUpdatesTo(this);
   }
 }

 @Override
 @NonNull
 public DogViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
   DogItemBinding binding =
      DataBindingUtil.inflate(
         LayoutInflater.from(parent.getContext()),R.layout.dog_item,parent,false);
   binding.setCallback(mDogClickCallback);
   return new DogViewHolder(binding);
 }

 @Override
 public void onBindViewHolder(@NonNull DogViewHolder holder,int position) {
   holder.binding.setDog(mDogList.get(position));
   holder.binding.executePendingBindings();
 }

 @Override
 public int getItemCount() {
   return mDogList == null ? 0 : mDogList.size();
 }

 @Override
 public long getItemId(int position) {
   return mDogList.get(position).getId();
 }

 static class DogViewHolder extends RecyclerView.ViewHolder {
   final DogItemBinding binding;
   public DogViewHolder(DogItemBinding binding) {
    super(binding.getRoot());
    this.binding = binding;
   }
 }
}


(DogEntity也有Dog模型类,如果有帮助的话) 我已经尝试过使缓存无效/重新启动,我已经尝试过清理项目,重建项目。我已经开始一个新项目并将其文件复制到其中。 哦,也是,这是另外一个错误:

import the_derek.dogstuff.databinding.DogFragmentBindingImpl;

它告诉我无法解决 DogFragmentBindingImpl 我不知道它是如何生成的,但是我认为问题是相互交织的。我不知道我是否错过任何有帮助的代码,请告诉我。

(仿照) android architecture-components-samples

解决方法

您要在此处传递LiveData对象:

app:product="@{dogViewModel.dog}"

您需要传递:

app:product="@{dogViewModel.dog.value}"
,

所以我每天花6-8个小时在这个上面,因为谁知道要花多长时间逐行遍历我的代码,而它又神奇地修复了自己的...某种。

我放弃了希望,打算将精力转移到其他地方,并尝试解决该问题,因此我从驱动器中删除了项目文件夹,然后从版本控制(从我的个人项目)中删除了New-> Project和错误不再存在。即使重建了项目,清理了缓存等等,这也以某种方式解决了该问题。无论我如何更改代码或XML文件,它都一定不想重建或重新创建BTS文件,但是当它感觉到一个全新的项目时,它们便是新的。

也许这是Android Studio中的错误?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-