作者:-孙立佳得 | 来源:互联网 | 2022-12-10 11:27
我开始使用DataBinding,而onClick出了点问题。
GameViewModel.java
public void onClickItem(int row, int col){
Log.d("click","row: "+row+" col: "+col);
}
@BindingAdapter("load_image")
public static void loadImage(ImageView view,int imageId) {
view.setImageResource(getDrawable(imageId));
}
GameFragment.java
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//View view=inflater.inflate(R.layout.fragment_game, container, false);
FragmentGameBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_game, container, false);
View view = binding.getRoot();
ButterKnife.bind(this,view);
binding.setGameViewModel(gameViewModel);
gameViewModel= ViewModelProviders.of(getActivity()).get(GameViewModel.class);
gameViewModel.init();
return view;
}
fragment_game.xml
(...)
load_image工作正常,但onClick却不执行任何操作...编译中没有错误,单击设备时没有崩溃,控制台中没有结果...
1> Rajan Bhavsa..:
请检查以下代码:
您编写了,以点击“图片点击”为:
android:OnClick="@{() -> gameViewModel.onClickItem(1,1)}"
尝试编写如下内容,然后再次检查:
android:OnClick="@{(v) -> gameViewModel.onClickItem(1,1)}"
按照指导这不是实现体系结构原理的方法,我们可以按照MVVM体系结构按以下方式工作:1.创建一个接口2.将接口定义为布局文件中的处理程序,如下所示:
3.现在我们正在使用此处理程序将onclick定义为:
android:OnClick="@{(v) ->handler.onGalleryItemClick(v,currentPosition,photo)}"
使用我们的java类或Activity类实现Handler,然后将Handler与View绑定,如下所示:
private MustVisitItemListener mItemListener;
mItemListener = new MustVisitItemListener(){};
5.设置具有绑定对象的接口处理程序,如下所示:
mbinding.setHandler(mItemListener);