gpt4 book ai didi

android - onclick 在 fragment 中使用数据绑定(bind)

转载 作者:行者123 更新时间:2023-11-29 22:40:31 25 4
gpt4 key购买 nike

我正在尝试在 Fragment 中实现数据绑定(bind),但它不起作用,相同的代码在 Activity 中有效。

fragment 类

    final FragmentHomeBinding fragmentHomeBinding = DataBindingUtil.inflate(
inflater, R.layout.fragment_home, container, false);

homeViewModel = ViewModelProviders.of(this).get(HomeViewModel.class);
View root = inflater.inflate(R.layout.fragment_home, container, false);
fragmentHomeBinding.setVariable(BR.homeViewModel, homeViewModel);
HomeEventHandler homeEventHandler = new HomeEventHandler(getActivity());
fragmentHomeBinding.setHandler(homeEventHandler);

事件处理器类

HomeEventHandler(Context mContext) {
this.mContext = mContext;
}

public void onButtonClick(View view) {
Log.e("DB", "onButtonClick: ");
switch (view.getId()){
case R.id.frag_home_ll_stock:
Toast.makeText(mContext, "clicked", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(mContext, StockCheckActivity.class);
mContext.startActivity(intent);
}
}

最后是xml文件

<data>

<import type="android.view.View" />

<variable
name="fragment"
type="com.poc.ui.home.HomeFragment"/>

<variable
name="handler"
type="com.poc.ui.home.HomeEventHandler"/>

</data>

<LinearLayout
android:onClick="@{view->handler.onButtonClick(view)}"
android:id="@+id/frag_home_ll_stock"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/grey_25"
android:clickable="true"
android:focusable="true"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="16dp">
<!--
-->
<TextView
android:id="@+id/frag_home_tv_op4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:clickable="false"
android:text="@string/w_stock_check"
android:textColor="@color/black"
android:textSize="18sp" />

<ImageView
android:id="@+id/frag_home_iv_op4"
android:layout_width="72dp"
android:layout_height="72dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:clickable="false"
app:srcCompat="@drawable/ic_stock" />


</LinearLayout>

最佳答案

从您的 Fragment 中删除以下行

View root = inflater.inflate(R.layout.fragment_home, container, false);

如果你需要 View ,你可以像下面这样传递一个参数

android:onClick="@{(view) -> handler.onButtonClick(view)}" 

您的 LinearLayout 应该如下所示。

 <LinearLayout
android:onClick="@{(view)->handler.onButtonClick(view)}"
android:id="@+id/frag_home_ll_stock"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@color/grey_25"
android:clickable="true"
android:focusable="true"
android:gravity="center_horizontal"
android:orientation="vertical"
android:padding="16dp">

关于android - onclick 在 fragment 中使用数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59047389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com