尝试在具有ViewModel的片段之间进行通信时发生编译错误



我遵循本指南实现了片段之间的通信。这是指南中的相关代码:

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);
});
}
}

相关内容

  • 没有找到相关文章

最新更新