【问题标题】:How to use onClick in fragment in data binding?如何在数据绑定的片段中使用onClick?
【发布时间】:2019-01-22 12:58:55
【问题描述】:

我想在片段中使用 onClick 方法,但数据绑定没有看到方法。

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    FragmentTodayBinding fragmentTodayBinding = DataBindingUtil.inflate(inflater,R.layout.fragment_today, container, false);
    View view = fragmentTodayBinding.getRoot();
    final MainViewModel mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
    fragmentTodayBinding.setMainViewModel(mainViewModel);
fragmentTodayBinding.searchButton.setOnClickListener(this::onSearchClick);          
    });

    return view;
}

@Override
public void onSearchClick(View v) {
    mainViewModel.getCity();
    Toast.makeText(getActivity(), "X", Toast.LENGTH_SHORT).show();
}

按钮 xml:

   <Button
    android:id="@+id/search_button"
    android:onClick="@{(v)-> todayFragmentInterface.onSearchClick(v)}"
    android:layout_width="40dp"
    android:layout_height="40dp"
    android:layout_alignParentEnd="true"
    android:layout_marginEnd="10dp"
    android:layout_marginTop="5dp"
    android:background="@drawable/ic_search_white_24dp" />

如何在fragment中正确使用?

【问题讨论】:

    标签: android data-binding


    【解决方案1】:

    按照这个步骤:

    1) 在onCreateView中添加这一行

    fragmentTodayBinding.fragment = this;
    

    2) 在您的layout.xml 中添加这一行

    <variable name="fragment" type="yourPackage.ClassName" />
    

    3) 在 xml 中编辑 onClick

    android:onClick="@{(v)-> fragment.onSearchClick(v)}"
    

    您也可以删除:

    fragmentTodayBinding.searchButton.setOnClickListener(this::onSearchClick);           
    

    我看到你使用@Override所以需要一个接口,目的是一样的,只是在xml变量中使用变量接口(并用接口的包引用它),而不是使用fragmentTodayBinding.myInterface = this;

    所以:

    1) fragmentTodayBinding.myInterface = this;

    2) &lt;variable name="myInterface" type="yourPackage.Interface" /&gt;

    3)android:onClick="@{(v)-&gt; myInterface.onSearchClick(v)}"

    【讨论】:

      猜你喜欢
      • 2020-03-21
      • 1970-01-01
      • 2020-04-14
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多