Android mvvm的基本使用

1,viewMode 是view和model的的中間層,有生命週期,並且即使切換屏幕也不用destroy

2,liveData是用於存儲viewModel數據的抽象類,他的子類是MutableLiveData,, 一般兩者結合使用,

2,dataBinding 是把viewModel和ui結合的google推出的官方框架

eg:

build.gradle

dataBinding{
        enabled = true
    }
public class UserActivity extends Activity {
 
      {@literal @}Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.user_activity_layout);
          final UserModel viewModel =                    ViewModelProviders.of(this).get(UserModel.class);
          viewModel.userLiveData.observer(this, new Observer<User>() {
             {@literal @}Override
              public void onChanged(@Nullable User data) {
                  // update ui.
              }
          });
          findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
              {@literal @}Override
              public void onClick(View v) {
                  viewModel.doAction();
              }
          });
      }
  }

 

public class UserModel extends ViewModel {
      private final MutableLiveData&lt;User&gt; userLiveData = new MutableLiveData&lt;&gt;();
 
      public LiveData&lt;User&gt; getUser() {
          return userLiveData;
      }
 
      public UserModel() {
          // trigger user load.
      }
 
      void doAction() {
          // depending on the action, do necessary business logic calls and update the
          // userLiveData.
      }
  }

 

public class MyFragment extends Fragment {
      public void onStart() {
          UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);
      }
  }
<layout>
    <data>
        <variable
                name="userModel"
                type="com.xxxx.xxx.userModel"
                />
    </data>

    <viewGroup>
        <TextView>
           android:text="@{userModel.userLiveData}" // 單向數據
        </TextView>

        <EditText>
           android:text="@={userModel.userLiveData}" // 雙向數據
        </EditText>

        <Button>
           android:onClick="@{()->userModel.userModel()}" // 點擊事件
        </Button>

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