Navigation(3)

在這裏插入圖片描述
在這裏插入圖片描述
APP架構:一個Activity通過Navigation導航到多個fragment

示例:
在這裏插入圖片描述

//MyViewModel
//創建MyViewModel類,在類內定義LiveData
//定義數據操作的函數
public class MyViewModel extends ViewModel  {
    private MutableLiveData<Integer>number;

    public MutableLiveData<Integer>getNumber(){
        if(number == null){
            number = new MutableLiveData<>();
            number.setValue(0);
        }
        return number;
    }
    public void add(int x) {
        number.setValue(number.getValue() + x);
        if(number.getValue() < 0) {
            number.setValue(0);
        }
    }
}
/**
 * 定義主頁面Fgment
 * //在匿名內部類中調用需要加final修飾符
 *
 * 1.創建myViewModel對象
 * 2.關聯viewmodel和activity
 * 3.創建碎片binding類對象
 * 4.binding XML
 * 5.binding 數據源
 * 6.binding 觀察者
 *
 *
 */
public class MasterFragment extends Fragment {


    public MasterFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        //在匿名內部類中調用需要加final修飾符
        final MyViewModel myViewModel;

        myViewModel = new ViewModelProvider(getActivity()).get(MyViewModel.class);
        FragmentMasterBinding binding;
        binding = DataBindingUtil.inflate(inflater,R.layout.fragment_master,container,false);
        binding.setData(myViewModel);
        binding.setLifecycleOwner(getActivity());

        binding.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavController controller = Navigation.findNavController(v);
                controller.navigate(R.id.action_masterFragment_to_detailFragment);
            }
        });
        binding.seekBar.setProgress(myViewModel.getNumber().getValue());

        binding.seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                myViewModel.getNumber().setValue(progress);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        return binding.getRoot();
    }
}
//同理,通過設置viewmodel,livedata,binding後
// 數據的操作在View Model類內,Fgment內只留下導航代碼,控件代碼
public class DetailFragment extends Fragment {

    MyViewModel myViewModel ;

    public DetailFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        myViewModel = new ViewModelProvider(getActivity()).get(MyViewModel.class);
        FragmentDetailBinding binding;
        binding = DataBindingUtil.inflate(inflater,R.layout.fragment_detail,container,false);
        binding.setData(myViewModel);
        binding.setLifecycleOwner(getActivity());

        binding.button4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                NavController navController = Navigation.findNavController(v);
                navController.navigate(R.id.action_detailFragment_to_masterFragment);
            }
        });
        return binding.getRoot();


    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章