我遵循本指南实现了片段之间的通信。这是指南中的相关代码:
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);
});
}
}