如何解决如何实现ViewModelProvider.Factory?
我想通过Fragment的 onViewCreated 方法访问 ViewModel 类(扩展了AndroidViewModel)。下面的代码行应按android documentation的说明工作。但事实并非如此!
ProductListViewModel viewModel = new ViewModelProvider(this).get(ProductListViewModel.class);
显然, ViewModelProvider 构造函数最近已更改。它需要一个 ViewModelProvider.Factory 实现作为第二个参数。为什么需要 ViewModelProvider.Factory 实现,应该怎么做?
这是我的Fragment类:
public class HomeFragment extends Fragment {
private HomeListAdapter homeListAdapter;
public HomeFragment() {
// Required empty public constructor
}
public static HomeFragment newInstance() {
return new HomeFragment();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home,container,false);
homeListAdapter = new HomeListAdapter(getContext());
RecyclerView homeRecyclerView = view.findViewById(R.id.rv_products);
homeRecyclerView.setAdapter(homeListAdapter);
homeRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
return view;
}
@Override
public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
super.onViewCreated(view,savedInstanceState);
ProductListViewModel viewModel = new ViewModelProvider(this).get(ProductListViewModel.class);
viewModel.getAllProducts().observe(this,new Observer<List<Product>>() {
@Override
public void onChanged(List<Product> products) {
homeListAdapter.setProducts(products);
}
});
}
}
这是我的ViewModel:
public class ProductListViewModel extends AndroidViewModel {
private ProductRepository mRepository;
private LiveData<List<Product>> mAllProducts;
public ProductListViewModel(@NonNull Application application) {
super(application);
mRepository = new ProductRepository(application);
mAllProducts = mRepository.getAllProducts();
}
public LiveData<List<Product>> getAllProducts() {
return mAllProducts;
}
public void insert(Product product) {
mRepository.insert(product);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。