viewmodel----02----viewmodel跟liveData结合使用才最好
LiveData和ViewModel的关系
在ViewModel中的数据发生变化时通知页面

一个小例子,每一秒加1

MyViewModel.class
 
public class MyViewModel extends ViewModel { private MutableLiveData<Integer> currentSecond; public MutableLiveData<Integer> getCurrentSecond() { if (currentSecond == null){ currentSecond = new MutableLiveData<>(); currentSecond.setValue(0); } return currentSecond; } }
MainActivity
 
public class MainActivity extends AppCompatActivity { TextView textView; MyViewModel myViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); //获取ViewModel myViewModel = new ViewModelProvider(this,new ViewModelProvider .AndroidViewModelFactory(getApplication())) .get(MyViewModel.class); textView.setText(String.valueOf(myViewModel.getCurrentSecond().getValue())); //一秒加一个数 startTimer(); myViewModel.getCurrentSecond().observe(this, new Observer<Integer>() { @Override public void onChanged(Integer integer) { textView.setText(String.valueOf(myViewModel.getCurrentSecond().getValue())); if (myViewModel.getCurrentSecond().getValue() == 99){ textView.setText(String.valueOf(0)); } } }); } private void startTimer() { new Timer().schedule(new TimerTask() { @Override public void run() { //非UI线程 用 postValue //UI线程 用 setValue myViewModel.getCurrentSecond().postValue(myViewModel.getCurrentSecond().getValue()+1); } },2000,1000); //2000毫秒后开始执行 period:每隔1000毫秒跑一下这个线程 } }
 
第二个小例子,简单的应用:ViewModel+LiveData 两个fragment间的通信

MyViewModel
public class MyViewModel extends ViewModel { private MutableLiveData<Integer> progress; public MutableLiveData<Integer> getProgress() { if (progress == null){ progress = new MutableLiveData<>(); progress.setValue(0); } return progress; } }
fragment1
 
public class BlankFragment extends Fragment { SeekBar seekBar1; MyViewModel myViewModel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View inflate = inflater.inflate(R.layout.fragment_blank, container, false); seekBar1 = inflate.findViewById(R.id.seekBar); //获取ViewModel myViewModel = new ViewModelProvider(getActivity(),new ViewModelProvider.AndroidViewModelFactory(getActivity().getApplication())).get(MyViewModel.class); myViewModel.getProgress().observe(getActivity(), new Observer<Integer>() { @Override public void onChanged(Integer integer) { seekBar1.setProgress(integer); } }); seekBar1.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { myViewModel.getProgress().setValue(seekBar.getProgress()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); return inflate; } }
fragment2
 
public class BlankFragment2 extends Fragment { SeekBar seekBar2; MyViewModel myViewModel; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View inflate = inflater.inflate(R.layout.fragment_blank2, container, false); //获取ViewModel myViewModel = new ViewModelProvider(getActivity(),new ViewModelProvider.AndroidViewModelFactory(getActivity().getApplication())).get(MyViewModel.class); myViewModel.getProgress().observe(getActivity(), new Observer<Integer>() { @Override public void onChanged(Integer integer) { seekBar2.setProgress(integer); } }); seekBar2 = inflate.findViewById(R.id.seekBar2); seekBar2.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int i, boolean b) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); return inflate; } }
mainactivity
public class MainActivity extends AppCompatActivity { TextView textView2; MyViewModel myViewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView2 = findViewById(R.id.textView2); //获取ViewModel myViewModel = new ViewModelProvider(this,new ViewModelProvider.AndroidViewModelFactory(getApplication())).get(MyViewModel.class); myViewModel.getProgress().observe(this, new Observer<Integer>() { @Override public void onChanged(Integer integer) { textView2.setText(myViewModel.getProgress().getValue().toString()); } }); } }
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号