Android数据绑定报错:无法找到OrdersActivity的orderList访问器
解决Data Binding找不到orderList访问器的问题
我一眼就看出问题所在啦——你的orderList是默认包私有成员变量(没加访问修饰符),Data Binding框架没办法直接访问它,这就是编译报错的根源。
为什么会报错?
Data Binding在解析表达式handler.orderList.size时,会尝试访问OrdersActivity里的orderList字段,但Java中默认的包私有权限,无法让Data Binding生成的代码跨包访问(除非布局生成类和Activity在同一个包,但这不是可靠的依赖方式)。我们需要给Data Binding提供合法的访问路径。
两种解决方案,选一个就行:
方案1:把orderList改成public修饰
直接修改Activity里的变量声明,加上public关键字,让Data Binding能直接访问:
public class OrdersActivity extends AppCompatActivity { // 改成public让Data Binding直接访问 public ObservableArrayList<OrderEntry> orderList = new ObservableArrayList<>(); @Override public void setOrderList(List<OrderEntry> list) { this.orderList.clear(); this.orderList.addAll(list); } }
方案2:添加符合JavaBean规范的getter方法(更推荐)
这是更符合封装原则的做法,保持变量私有,通过getter方法暴露访问:
public class OrdersActivity extends AppCompatActivity { private ObservableArrayList<OrderEntry> orderList = new ObservableArrayList<>(); // 添加getter方法,Data Binding会自动识别映射 public ObservableArrayList<OrderEntry> getOrderList() { return orderList; } @Override public void setOrderList(List<OrderEntry> list) { this.orderList.clear(); this.orderList.addAll(list); } }
这种方式下,你完全不用修改布局里的表达式,Data Binding会自动把handler.orderList映射到getOrderList()方法。
额外提示
因为你用的是ObservableArrayList,当列表内容或大小变化时,Data Binding会自动触发UI更新,只要解决了访问权限问题,你的TextView就能正常根据列表大小切换可见性了。
内容的提问来源于stack exchange,提问作者user8542613
相关产品推荐
相关产品推荐

