xamarin.forms跳转android native并传参
2016-11-02 19:20
253 查看
xamarin开发过程中,能写在pcl的尽量写在pcl,提高复用率,但有时候因为一些已知的原因,不得不去使用native,xamarin官方github上有提供这部分源码Forms2Native供参考,这里以实际开发过程中实现xamarin android截图控件为例。
一、pcl中:SourcePage为调用方,CropPage.cs为目标页;
public SourcePage() { InitializeComponent(); var command = new Command(async () => { //获取gallery中照片 var mediaPicker = DependencyService.Get<IMediaPicker>(); var result = await mediaPicker.SelectPhotoAsync(new CameraMediaStorageOptions { DefaultCamera = CameraDevice.Front, MaxPixelDimension = 400 }); //创建CropPage并传入照片路径 var desPage = new CropPage(result.Path); //跳转 App.Current.MainPage = desPage; //跳转后会出现两个页面,实际上CropPage还是生成了,在点击左下方的返回按钮时回到的是CropPage而不是SourcePagae, //我这里是将原调用页重新指定回去,不知道其他人是怎么处理的,欢迎告知。 App.Current.MainPage = new SourcePage(); }); btnSelectPhoto.Command = command; }
二、CropPage.cs
public class CropPage : ContentPage { //欲传往native的参数,写成公共属性供native中Renderers的OnCreate方法调用,这里为图片路径 public string FilePath { get; set; } public CropPage() { } public CropPage(string filePath):this() { FilePath = filePath; } }
三、xamarin android中,特定Renderer绑定CropPage和Renderer本身,这里为CropPageRenderer
//该特性实现CropPage和CropPageRenderer的绑定 [assembly:ExportRenderer(typeof(AppPortable.CropPage), typeof(App.Droid.Renderers.CropPageRenderer))] namespace App.Droid.Renderers { public class CropPageRenderer : PageRenderer { protected override void OnElementChanged(ElementChangedEventArgs<Page> e) { base.OnElementChanged(e); var filePath = ""; if (e.NewElement != null) { //这边获取CropPage所传递的参数 filePath = (e.NewElement as CropPage).FilePath; } //开始运行指定的Activity,这里是CropActivity var activity = this.Context as Activity; var cropActivity = new Intent(activity, typeof(CropActivity)); activity.StartActivity(cropActivity); } } }
四、xamarin android中的CropActivity.cs
namespace App.Droid { [Activity(Label = "CropActivity")] public class CropActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); //这边就完成了,至于layout目录下的axml目标axml SetContentView(Resource.Layout.CropImage); } } }
相关文章推荐
- (转)利用flashvars传参 AS2
- Struts2中文传参问题
- js post get 各种传参
- 黑马程序员之C#学习笔记:C#中页面之间传值传参的六种方法
- C++的三种传参方式
- 关于结构体成员,在传参过程中,数值发生变化(估计是我定义的结构体有不对的地方)
- jsp URL中文传参乱码问题
- jsp js 函数 传参 只接受<%=request.getAttribute("name")%> 形式
- string 传参
- 【转载】c++中用二维数组传参时该怎么写
- 地址栏传参需要编码
- jsp利用表单跳转到另一个jsp页面传参时中文显示乱码
- activity间的传参
- 一个问题:C#引用类型传参,说出你的答案
- JSP网页传参错误(0151转八进制成333)
- 浏览器url传参中文时得到null的解决方法
- nrpe传参实现更合理监控
- javaScript函数调用传参本质-引用传递参数? 错错错!
- IE6下传参奇数中文乱码
- C++中用二维数组传参时形参该怎样写[转]