如何在数据绑定的片段中使用onClick?

use*_*182 2 data-binding android

我想在片段中使用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();
}
Run Code Online (Sandbox Code Playgroud)

按钮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" />
Run Code Online (Sandbox Code Playgroud)

如何正确使用它的片段?

Mic*_*rte 6

请按照以下步骤操作:

1)在这行中添加 onCreateView

fragmentTodayBinding.fragment = this;
Run Code Online (Sandbox Code Playgroud)

2)将此行添加到您的 layout.xml

<variable name="fragment" type="yourPackage.ClassName" />
Run Code Online (Sandbox Code Playgroud)

3)使用xml编辑onClick

android:onClick="@{(v)-> fragment.onSearchClick(v)}"
Run Code Online (Sandbox Code Playgroud)

您还可以删除:

fragmentTodayBinding.searchButton.setOnClickListener(this::onSearchClick);           
Run Code Online (Sandbox Code Playgroud)

我看到您使用了它,@Override因此需要一个接口,目标是相同的,只是使用xml变量中的变量接口(并使用接口包对其进行引用),而不是使用fragmentTodayBinding.myInterface = this;

所以:

1) fragmentTodayBinding.myInterface = this;

2) <variable name="myInterface" type="yourPackage.Interface" />

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