尝试在片段与 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);
});
}
}
我按照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);
});
}
}