天天看點

下拉重新整理

Xamrin 插件:

一、下拉重新整理

ListView清單中屬性:

IsPullToRefreshEnabled 将它設定為True

這樣下拉重新整理就激活了,但是沒有任何事件,是以下面給下拉重新整理添加事件

RefreshCommand屬性:
    它的值是一個Command類對象,是以可以這麼寫:
        new Command(async () => await RefreshCommand(list));

RefreshCommand是自定義的一個方法,當下拉重新整理被觸發時,這個方法才會被執行。

IsRefreshing屬性:
    當方法執行後,一定要将這個屬性為False,這很重要,不然重新整理動畫會一直在界面中顯示。


下拉重新整理的過程就是這樣,将這三個屬性設定一下,就可以使用下拉重新整理了。

1.2 問題:
    當我在RefreshCommand中試圖更新ListView,但是和想的不一樣。
在官網檢視後,如果需要動态的更新ListView,那麼就需要使用ObservableCollection集合指派給
ListView的ItemsSource屬性。

1.3 ObservableCollection我使用的方法
    Clear() 清空所有元素
    Add()   添加一個元素
           

二、調用機制

在Form跨平台中,需要調用手機APi是必不可少的。

首先在Form項目裡,建立一個接口,這裡示範為資訊框顯示。

public interface IMessage
    {
        void LogAlert(string message);
        void ShortAlert(string message);
    }

LogAlert方法,長時間顯示資訊文本
ShorAlert方法,短時間顯示資訊文本

在各個移動平台上實作這個接口,這裡拿Android來示範:
[assembly: Xamarin.Forms.Dependency(typeof(MessageAndroid))]
namespace App2.Droid
{
   class MessageAndroid : IMessage
  {
     public void LogAlert(string message)
     {
            Toast.MakeText(Application.Context, message, ToastLength.Long).Show();
     }


     public void ShortAlert(string message)
     {
         Toast.MakeText(Application.Context, message, ToastLength.Short).Show();
     }
  }
}

[assembly: Xamarin.Forms.Dependency(typeof(MessageAndroid))]這句話我的了解是在Dependency類裡注冊,好在Forms中調用具體怎麼說明,還沒有看文檔。
           

三、小細節

3.1跳轉頁面:
    SecondContentPage 類是一個繼承ContentPage類的子類
    Navigation.PushAsync (new SecondContentPage ());
3.2彈出警告窗

      var action = await DisplayAlert("Question?", "Would you like to play a game", "Yes", "No");

DisplayActionSheet(标題,内容,按鈕)
           

四、存在問題

當清單重新整理後,抛出異常,說什麼找不到該屬性,這個坑人的Bug,是在添加清單後,出現的。經過三個小時的重複排查,不由感歎VS2017這個工具,調試真的難,報錯也
           

出多少行錯誤,具體的報錯位置也不知道,就是連哪個檔案報錯也不提示,可能是Xamarin的“新特性”。哦,說那裡出現問題的,是在添加裝置清單後,擷取到的資料,其中一個是

null,就是不存在。然後加個判斷就解決這個Bug了。

昨天說到可以通過HttpWebRequest類可以實作網絡請求,因為是異步請求,是以如果伺服器沒有開,網絡請求肯定是逾時,當時方法卻是異步的,無法正确捕獲