2017-04-11 145 views
0

我正在嘗試用於Android的MVVM。 我有一個按鈕,打開另一個活動onClick。下面 代碼:適用於Android的MVVM活動意圖

查看:

<LinearLayout 
      android:id="@+id/activity_test" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      tools:context=".mvvm.view.TestActivity"> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Activity" 
      android:onClick="@{viewModel.onClickButton1}"/> 

    </LinearLayout> 

視圖模型:

public View.OnClickListener onClickButton1() { 
    return view -> { 
     mContext.startActivity(new Intent(mContext, MockActivity.class)); 
    }; 
} 

這似乎並不爲我工作。當我點擊按鈕時,MockActivity不會開始。可能是什麼問題呢?

回答

2
在視圖文件

做你把你的視圖綁定到你的視圖模型上?

binding.setViewModel(viewModel);

+0

中的正確代碼。 我需要在View Activity中設置ViewModel。 最重要的是,我需要爲我的意圖添加標誌: intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – andychen

0

嘗試視圖模型:: onClickButton1代替viewModel.onClickButton1

+0

這不會有什麼區別..它只是給出了一個警告,如果你使用'。'代替 '::'.. '。'已被棄用,但現在都被接受。 – Rachit

0

在你的虛擬機類的代碼應該是

public void onMyButtonClicked(View view) { 
    // YOUR CODE HERE 
} 

並且XML:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:onClick="@{offlineDownloadsVM::onMyButtonClicked}"/> 
+0

已接受。這是接受的ViewModel – andychen

0

作爲一個建議,最好不要在你的ViewModel中包含視圖事件監聽器,而是把它們放到視圖(activity或fragment)中,然後你可以調用視圖模型方法來完成這項工作。這個想法是,ViewModel應該沒有任何引用來查看類,但在你的代碼中,你將視圖傳遞給onClickButton1方法。