안드로이드

[Android] data Binding + liveData 적용 주의 ui not updated

IT꿈나무 2021. 11. 11. 14:13
반응형

주의점: 

라이프 사이클 소유자가 설정해야합니다 있습니다 binding로 binding.setLifecycleOwner(this). MainViewModel에 대해서도 설정해야 합니다 binding. 그렇지 않으면 UI가 제대로 작동하지 않습니다. 확실하지 않은 경우 항상 여기에서 공식 문서를 확인하십시오.

 

public class MainFragment extends Fragment {
    private MainViewModel mainViewModel;
    private FragmentMainBinding binding;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        binding = DataBindingUtil.inflate(inflater, R.layout.fragment_main, container,
                false);
        binding.setLifecycleOwner(this); //!! 중요 설정하지 않으면 UI가 변경되지 않음

        mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
        binding.setViewModel(mainViewModel);

        return binding.getRoot();
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        mainViewModel.getTakePhoto().observe(getViewLifecycleOwner(), takePhoto -> {
            if (takePhoto) {
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

                if (intent.resolveActivity(getActivity().getPackageManager()) != null) {
                    File photo = mainViewModel.storeImage();
                    if (photo != null) {
                        Uri photoURI = FileProvider.getUriForFile(getActivity(),"com.example.fileprovider", photo);
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
                        this.startActivityForResult(intent, 0);
                    }
                }
            }
        });
        binding.executePendingBindings();
    }
}

 

참고자료:

[1]  UI에서 liveData가 업데이트 되지 않음 ,https://newbedev.com/mutablelivedata-not-updating-in-ui

반응형