我正在尝试使用 DataBinding 库在我的应用程序中实现 MVVM。对于我已经完成的简单任务,我可以找到出路,但问题是我无法在执行某些操作后完成 Activity 。
问题:
收到特定广播后,我必须关闭 ViewModel 类的 Activity 。由于 VM 类没有 View 的引用,我该如何完成 Activity ? 准确地说,我有启动画面和相应的 VM 类,它启动 IntentService 来下载数据。下载数据后,我必须完成初始屏幕并启动 MainActivity。我找到了从 VM 启动新 Activity 的方法,但是要完成前一个 Activity 还是个谜。
你能帮帮我吗? 谢谢!
最佳答案
使用 ObservableBoolean 创建一个 SplashStatus 模型:
private static class SplashStatus {
public final ObservableBoolean isFinished = new ObservableBooelan();
}
这是您的 Splash 布局:
<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>
和绑定(bind)适配器方法:
@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();
}
}
在 SplashActivity.java
中,在 onCreate 上初始化您的数据绑定(bind)。每当您分配 isFinished.set(true)
onFinished 方法时,都会启动您的 MainActivity 并完成当前。
关于Android 数据绑定(bind) Activity 结束(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42365360/