尝试在片段与 ViewModel 之间进行通信时出现编译错误

Compilation error trying to communicate between Fragments with ViewModel

我按照this guide实现了片段间的通信。这是指南中的相关代码:

    SharedViewModel model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
    model.getSelected().observe(getViewLifecycleOwner(), { item ->
       // Update the UI.
    });

我的实际代码如下所示:

    HeaderViewModel model = new ViewModelProvider(requireActivity()).get(HeaderViewModel.class);
    TextView year = view.findViewById(R.id.year_text);
    model.getYear().observe(getViewLifecycleOwner(), { item -> year.setText(item) });

这是我得到的错误:

error: illegal start of expression
    model.getYear().observe(getViewLifecycleOwner(), { item -> year.setText(item) });
                                                     ^

为什么?这是什么意思?如何解决?

您似乎偶然发现了文档中的拼写错误:您使用的片段在语法上是错误的,应该是

model.getYear().observe(getViewLifecycleOwner(), item -> {year.setText(item)});

在错误示例的正上方有另一个带有另一个 lambda 表达式的代码段,它展示了如何正确执行此操作:

public class MasterFragment extends Fragment {
    private SharedViewModel model;

    public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        model = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);
        itemSelector.setOnClickListener(item -> {
            model.select(item);
        });
    }
}