BiBi - Mvvc(Jetpack)

2018-12-13  本文已影响18人  奋飞的蜗牛ing

1、Lifecycles

创建Observer,LifecycleObserver是一个标记接口。

class MyObserver implements LifecycleObserver {
  Lifecycle lifecycle;
  CallBack callBack;

  MyObserver(Lifecycle lifecycle, CallBack callback) {
    this.lifecycle = lifecycle;
    this.callBack = callback;
  }

  @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
  public void connectOnCreate() {
    update("connectOnCreate");
  }

  @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
  public void connectOnResume() {
    update("connectOnResume");
  }

  @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
  public void disConnectOnDestroy() {
    update("disConnectOnDestroy");
  }

  private void update(String str) {
    callBack.update(str);
  }

  public interface CallBack {
    void update(String str);
  }
}

创建Activity并实现LifecyclesOwner。

public interface LifecycleOwner {
    Lifecycle getLifecycle();
}
public class TestActivity extends AppCompatActivity implements LifecycleOwner {
  LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
  MyObserver myObserver = new MyObserver(lifecycleRegistry,
      str -> Toast.makeText(TestActivity.this, str, Toast.LENGTH_SHORT).show());

  @NonNull
  public Lifecycle getLifecycle() {
    return lifecycleRegistry;
  }

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    lifecycleRegistry.addObserver(myObserver);
    lifecycleRegistry.markState(Lifecycle.State.CREATED);
  }

  @Override
  protected void onResume() {
    super.onResume();
    lifecycleRegistry.markState(Lifecycle.State.RESUMED);
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    lifecycleRegistry.markState(Lifecycle.State.DESTROYED);
  }
}

AppCompatActivity继承SupportActivity,而SupportActivity本身就实现了LifecycleOwner,上述TestActivity中的很多操作都已经在SupportActivity中完成了,那么上述的使用可以直接更简化为:

public class TestActivity extends AppCompatActivity implements LifecycleOwner {
  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyObserver myObserver = new MyObserver(getLifecycle(),
        str -> Toast.makeText(TestActivity.this, str, Toast.LENGTH_SHORT).show());
    getLifecycle().addObserver(myObserver);
  }
}

SupportActivity在onCrate的方法中初始化了一个ReportFragment,ReportFragment在其生命周期中dispatch相应的Event生命周期,如 dispatch(Lifecycle.Event.ON_CREATE);

        ReportFragment.injectIfNeededIn(this);

原文:https://blog.csdn.net/Alexwll/article/details/80638905

@OnLifecycleEvent:运行注解

// LifecycleOwner使用了弱引用
private final WeakReference<LifecycleOwner> mLifecycleOwner;
public LifecycleRegistry(@NonNull LifecycleOwner provider) {
      mLifecycleOwner = new WeakReference<>(provider);
      mState = INITIALIZED;
}
public void handleLifecycleEvent(@NonNull Lifecycle.Event event) {
      State next = getStateAfter(event);
      moveToState(next);
}
// Fragment中调用
mLifecycleRegistry.handleLifecycleEvent(Lifecycle.Event.ON_CREATE);

2、ViewModel

 SharedViewModel model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);

原文:https://blog.csdn.net/Alexwll/article/details/82459614

3、LiveData

class TestViewModel : ViewModel() {
    var mCurrent: MutableLiveData<String>? = null
        get() {
            if (field == null) {
                field = MutableLiveData() // 创建一个LiveData实例来保存某种类型的数据
            } // LiveData对象必须在ViewModel中
            return field
        }
}
-------------------------
val nameObservable = Observer<String> {   // 创建观察者对象
    textView.text = it       // 创建一个定义onChanged()方法的Observer对象,在数据变化时回调
}
-------------------------
// 使用LifecycleOwner的observe() 方法将观察者对象附加到LiveData对象,这将观察对象向LiveData对象订阅,以便通知其更改
mModel = ViewModelProviders.of(this).get(TestViewModel::class.java)
// mCurrent 订阅观察
mModel.mCurrent!!.observe(this, nameObservable) 


原文:https://blog.csdn.net/Alexwll/article/details/82996003

4、Navigation

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/second" app:startDestination="@id/fragmentT">
 
    <fragment android:id="@+id/fragmentT" android:name="com.example.administrator.navigation.FragmentT"
              android:label="fragment_fragment_t" tools:layout="@layout/fragment_fragment_t">
        <action android:id="@+id/action_fragmentT_to_fragmentOther" app:destination="@id/fragmentOther"/>
    </fragment>
 
    <fragment android:id="@+id/fragmentOther" android:name="com.example.administrator.navigation.FragmentOther"
              android:label="fragment_fragment_other" tools:layout="@layout/fragment_fragment_other"/>
</navigation>
btnActivity.setOnClickListener {
    val option = ActivityOptionsCompat.makeSceneTransitionAnimation(activity as Activity, imageView, "image")
    val exeras = ActivityNavigator.Extras(option)
    Navigation.findNavController(btnFragment)
        .navigate(R.id.action_blankFragment_to_secondActivity2, null, null, exeras)

原文:https://blog.csdn.net/Alexwll/article/details/83244004

上一篇 下一篇

猜你喜欢

热点阅读