【发布时间】:2020-03-21 15:54:52
【问题描述】:
我正在尝试在 Fragment 中实现数据绑定,但它不工作,相同的代码在 Activity 中工作。
片段类
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>
【问题讨论】:
标签: android android-fragments mvvm data-binding