Android: Jetpack Databinding Nav

作者: 壹零二肆 | 来源:发表于2020-02-22 13:48 被阅读0次

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

相关文章

网友评论

    本文标题:Android: Jetpack Databinding Nav

    本文链接:https://www.haomeiwen.com/subject/nytlqhtx.html