Android DataBinding活动完成()

7
我正在尝试使用DataBinding库在我的应用中实现MVVM。对于我能完成的简单任务,我可以找到解决方法,但问题是在某些操作之后我无法结束活动。
问题:
在接收到特定广播后,我必须从ViewModel类关闭活动。由于VM类没有View的引用,所以我该如何结束活动呢? 确切地说,我有一个启动意图服务来下载数据的启动屏幕和相应的VM类。当数据下载完成后,我必须结束启动屏幕并开始MainActivity。我已经找到了从VM启动新的Activity的方法,但如何结束前面的活动仍然是个谜。
你能帮助我吗? 谢谢!
3个回答

7

创建一个带有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>

绑定适配器方法:

@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方法中初始化您的数据绑定。每当您分配isFinished.set(true)到onFinished方法时,将启动您的MainActivity并完成当前活动。

5

如果您想通过数据绑定从布局中仅仅完成(activity):

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


0

如果数据绑定的所有者是片段,则可以选择另一种方法

首先,定义您的ViewModel类

public static class ViewModel extends AndroidViewModel {

    public ViewModel(@NonNull Application application) {
        super(application);
    }

    public void onFinish(View v) {
        ((DialogFragment) DataBindingUtil.findBinding(v).getLifecycleOwner()).dismissAllowingStateLoss();
    }
}

然后在您的数据绑定布局中

<data>

    <variable
        name="viewModel"
        type="com.xxxx.settingitemmoretest.MainActivity.ViewModel" />

</data>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".BlankFragment">

    <!-- TODO: Update blank fragment layout -->
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Exit"
        android:onClick="@{viewModel::onFinish}"/>

</FrameLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接