Android DataBinding Activity finish()

hog*_*gar 5 data-binding android mvvm android-activity android-databinding

我正在尝试使用DataBinding库在我的应用程序中实现MVVM。对于已经完成的简单任务,我可以找到出路,但是问题是我不能在完成某些操作后完成活动。

问题:

收到特定的广播后,我必须关闭ViewModel类的活动。由于VM类没有View的引用,我该如何完成活动?确切地说,我有启动屏幕和相应的VM类,用于启动IntentService来下载数据。数据下载后,我必须完成启动屏幕并启动MainActivity。我已经找到了从VM启动新的Activity的方法,但是要完成上一个是个谜。

你能帮我么?谢谢!

ugu*_*gur 5

使用ObservableBoolean创建一个SplashStatus模型:

private static class SplashStatus {
   public final ObservableBoolean isFinished = new ObservableBooelan();
}
Run Code Online (Sandbox Code Playgroud)

这是您的初始布局:

<layout xmlns:android="http://schemas.android.com/apk/res/android">
   <data>
       <variable name="status" type="com.example.SplashStatus"/>
   </data>
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="match_parent"
       android:layout_height="match_parent">
       <TextView android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="Splash Screen"
           android:onFinish="@{status.isFinished}"/>
   </LinearLayout>
</layout>
Run Code Online (Sandbox Code Playgroud)

和绑定适配器的方法:

@BindingAdapter("android:onFinish")
public static void finishSplash(View view, boolean isFinished) {

   if(isFinished){
       ((Activity)(view.getContext())).startActivity(new Intent(view.getContext(), MainActivity.class))
       ((Activity)(view.getContext())).finish();
   }
}
Run Code Online (Sandbox Code Playgroud)

SplashActivity.java初始化中,您的数据绑定在onCreate上。每当您分配isFinished.set(true)onFinished方法时,都会启动MainActivity并完成当前操作。


小智 5

如果您只想使用数据绑定完成()布局中的活动:

android:onClick="@{(view)->((Activity)(view.getContext())).finish()}"