2017-07-11 70 views
0

我正在開發一個帶有xamarin的應用程序(但只有Android),並且我不明白我在哪裏使用toast.MakeText,但是我在每個文件上嘗試了它,但我無法使用要求我作爲參數的上下文。我可以在Xamarin應用程序中使用toast.MakeText嗎?

我認爲文件中包含此調用到我的視圖模型

var a = await viewModel.SaveItems(st, folio, note); 

和我的ViewModel文件中包含該

public async Task<bool> SaveItems(int st, int folio, string note) 
     { 
      var result = await DataStore.UpdateItemAsync(st, folio, note, Item); 
      PostResult = await DataStore.SendPicItemAsync(result); 
      return PostResult; 
     } 

在這一刻我的變量PostResult被correcty分配,但我需要做什麼檢查我的PostResult在某處顯示我的警報消息。

功能DataStore.SendPicItemAsync(result)發送到我的服務器這個值,並返回此狀態(這是可以的)。

+0

呀,最後用Forms.Context – fabulias

+0

我認爲你的項目沒有一個PCL,因爲你說:「發展與xamarin一個應用程序(但只有Android的)」。 –

+0

是的,你能否向我解釋一下PCL和我的解決方案之間的區別?謝謝!!! – fabulias

回答

0

我不能使用要求我作爲參數的上下文。

您可以從下圖看到:

enter image description here

有Android中3種Context,我們只能用ActivityApplication作爲上下文參數顯示Toast

每個Activitycontext,一旦Activity被回收,就不能使用上下文。但是Application.Context的生命週期是整個應用程序,只要你的應用程序沒有被殺死,Application.Context就可以使用,Toast使用Application.Context可以顯示。

  1. 如果你想顯示乾杯位於您Activity類中,你可以使用這個context,則意味着當前Activity,使用這樣的:

    Toast.MakeText(this, "HI",ToastLength.Short).Show(); 
    
  2. 如果它在Activity之外,您需要獲取您的活動上下文(將其傳遞給構造函數等)或使用Android.App.Application.Context作爲上下文參數,如下所示:

    Toast.MakeText(Android.App.Application.Context, "HI",ToastLength.Short).Show(); 
    

編輯:PCL和我的解決方案之間

差異

我想你想知道有什麼區別是this

我的問題是,我沒有一個活動,

其實,當你Xamarin項目在Android設備部署,您的項目仍然有至少一個Activity,你ContentPage將上面的顯示Activity,你可以在你的項目like this中看到它。

我有ContentPage,並尋找,但互聯網我看到Forms.Context一個例子

我們可以從源代碼中看到:

public static Context Context { get; private set; } 
... 
public static void Init(Activity activity, Bundle bundle). 
{ 
    ... 
    Context = activity; 
    ... 
} 

當您使用Forms.Context,它會返回您正在使用的當前Activity作爲Context,以便您的Toast可以顯示。

+0

另外,任何'View'類都有'Context'屬性 –

0

我使用表單解決我的問題......

using System.Collections.Generic; 
using Android.Widget; 
using SQLite.Net; 
using Xamarin.Forms; 

namespace foo { 
    public partial class bar : Application { 
     async void send_Clicked(object sender, System.EventArgs e) { 
      Toast.MakeText(Forms.Context, "OK", ToastLength.Long).Show(); 
     } 
    } 
} 
相關問題