Java 使用导航控制器从以前的实例检索数据
我对Android开发还不太熟悉,我使用“导航”库 从我的第一个片段开始(这是一个从API获取数据的recyclerview),如果我导航到另一个片段,导航控制器将销毁第一个片段并创建第二个片段并显示它。如果我想返回到第一个片段(使用左箭头或后退按钮),它将销毁第二个片段并从头创建第一个片段,使其重新加载所有数据并使用bandwith 我已经阅读了许多解决方案,但它们都很挑剔:Java 使用导航控制器从以前的实例检索数据,java,android,android-recyclerview,viewmodel,Java,Android,Android Recyclerview,Viewmodel,我对Android开发还不太熟悉,我使用“导航”库 从我的第一个片段开始(这是一个从API获取数据的recyclerview),如果我导航到另一个片段,导航控制器将销毁第一个片段并创建第二个片段并显示它。如果我想返回到第一个片段(使用左箭头或后退按钮),它将销毁第二个片段并从头创建第一个片段,使其重新加载所有数据并使用bandwith 我已经阅读了许多解决方案,但它们都很挑剔: 使用mvvm 编写自己的导航控制器 使用mvp 我想知道在不再次调用API的情况下检索数据的更好方法是什么 我的第
- 使用mvvm
- 编写自己的导航控制器
- 使用mvp
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
AnnoncesViewModel annoncesViewModel = new ViewModelProvider(this).get(AnnoncesViewModel.class);
root = inflater.inflate(R.layout.fragment_annonces, container, false);
ctx = root.getContext();
recyclerView = root.findViewById(R.id.listeannonce_rv);
annoncesViewModel.getAnnonces().observe(this, data-> {
recyclerViewAdapter = new ListeAnnoncesAdapter(data, ctx, AnnoncesFragment.this);
recyclerView.setLayoutManager(new LinearLayoutManager(root.getContext()));
recyclerView.setAdapter(recyclerViewAdapter);
});
return root;
}
viewmodel:
public class AnnoncesViewModel extends ViewModel {
MutableLiveData<ArrayList<Annonce>> annonces;
ArrayList<Annonce> AnnonceArrayList;
public AnnoncesViewModel() {
annonces = new MutableLiveData<>();
AnnonceArrayList = new ArrayList<>();
annonces.setValue(AnnonceArrayList);
}
public MutableLiveData<ArrayList<Annonce>> getAnnonces() {
return annonces;
}
}
或
但这并没有改变任何事情
目前,当我按下一个按钮时,数据被检索
谢谢你的帮助 ViewModel方法是正确的选择。问题是,当您导航到新片段时,AnnonceViewModel也会被破坏,因为您正在将片段上下文传递给ViewModelProvider。要在导航到其他片段后保留ViewModel,请将活动上下文传递给提供程序,如:
ViewModelProviders.of(requireActivity()).get(AnnoncesViewModel::class.java)
这将在您再次启动片段时保持ViewModel“活动”,而不是在每次创建片段时创建新的AnnonceViewModel
navController.navigate(R.id.nav_frag2);
ViewModelProviders.of(requireActivity()).get(AnnoncesViewModel::class.java)