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类可以实现网络请求,因为是异步请求,所以如果服务器没有开,网络请求肯定是超时,当时方法却是异步的,无法正确捕获
异常,也无法正确给用户显示网络问题的提示,至今无法解决,明天问下大佬。
明天看第四章,今天赶着忙列表了
https://developer.xamarin.com/zh-cn/guides/xamarin-forms/creating-mobile-apps-xamarin-forms/summaries/chapter04/