2

我想在我的應用程序中使用DataBinding庫實現MVVM。對於我已經完成的簡單任務,我可以找到出路,但問題是,在某些操作後我無法完成活動。Android DataBinding Activity finish()

問題:

接收特定的廣播後,我不得不從ViewModel類關閉活動。由於VM類沒有引用該視圖,我該如何完成該活動? 準確地說,我有啓動屏幕和相應的VM類,它啓動了用於下載數據的IntentService。數據下載後,我必須完成啓動畫面並啓動MainActivity。我已經找到了從VM開始新活動的方法,但完成前一個活動是個謎。

你能幫我嗎? 謝謝!

回答

2

創建一個ObservableBoolean一個SplashStatus模型:

private static class SplashStatus { 
    public final ObservableBoolean isFinished = new ObservableBooelan(); 
} 

這裏是你的飛濺佈局:

<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並完成當前。