- Android: Jetpack Databinding Nav
- Android Jetpack系列学习(一)——DataBind
- Android Jetpack——DataBinding:从排斥
- Jetpack 实战Java(一)写Java版的sunflowe
- Android jetpack - DataBinding 数据
- Android Jetpack - DataBinding
- android jetpack databinding
- 【Android Jetpack】- DataBinding
- Android——JetPack{DataBinding}
- Android Jetpack DataBinding
Save state ViewModel
为View Model增加了构造器,使得程序可以在后台被杀死的情况仍然保留状态数据
方法
通过ViewModel内的SaveStateHandle对象来保存和取出数据
进程被系统杀死时,会自动将SaveStateHandle中存值状态保存
public class HomeViewModel extends ViewModel {
SavedStateHandle savedStateHandle;
public MutableLiveData<String> getHomeLiveData() {
if(!savedStateHandle.contains("HOME_DATA")){
savedStateHandle.set("HOME_DATA","NULL");
}
return savedStateHandle.getLiveData("HOME_DATA");
}
public void setHomeLiveData() {
this.savedStateHandle.set("HOME_DATA","JACK!");
}
public HomeViewModel(SavedStateHandle savedStateHandle) {
this.savedStateHandle = savedStateHandle;
}
}
DataBinding
android:text="@{String.valueOf(index + 1)}"
android:visibility="@{age > 13 ? View.GONE : View.VISIBLE}"
android:transitionName='@{"image_" + id}'
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
homeViewModel = new ViewModelProvider(requireActivity()).get(HomeViewModel.class);
FragmentHomeBinding binding;
binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
binding.setData(homeViewModel);
binding.setLifecycleOwner(getActivity());
return binding.getRoot();
}
这是在Fragment中使用的例子,如果在Activity中使用
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
用在ListView和RecyclerView中在Adapter中使用如下:
ListItemBinding binding = ListItemBinding.inflate
(layoutInflater, viewGroup, false);
// or
ListItemBinding binding = DataBindingUtil.inflate
(layoutInflater, R.layout.list_item, viewGroup, false);
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ItemSecondBinding binding = DataBindingUtil.getBinding(holder.itemView);
binding.setUser(users.get(position));
binding.executePendingBindings();
}
在recyclerView的Item中直接使用即可
Navigation graph
在入口Activity中添加
关键代码
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
button = getView().findViewById(R.id.detailHomeBtn);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//导航关键代码
NavController navController = Navigation.findNavController(v);
navController.navigate(R.id.action_detailFragment_to_homeFragment);
}
});
}
MainActivity.java
NavController navController = Navigation.
findNavController(this,R.id.fragment);
NavigationUI.setupActionBarWithNavController
(this,navController);
搭配
//如果需要toolbar上的左上位置有icon back 就需要回调处理点击
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.
findNavController(this,R.id.fragment);
return navController.navigateUp();
}
网友评论