如何为多个平台指定视图?

时间:2015-02-26 18:15:47

标签: c# android ios inheritance xamarin

这很难用语言表达。

我有一个class LoginPage : Activity,其中包含适用于Android的常见视图设置,例如OnCreate (Bundle bundle)等。

但由于这是一个跨平台的项目,我想概括每个平台(iOS,Windows)的视图结构,所以我写了一个public abstract class LoginPage,它只有像{{1}这样的方法。 }和abstract DoPageSetup()等。

问题: 当我将abstract checkLogin()放入我的核心项目(PCL)时,我可以从我的Android项目继承它,但由于C#中禁止多重继承,我不能继承我需要的Activity。

因为在一天结束时,我会从我的abstract class LoginPage LoginPage MainActivity这样称呼StartActivity(typeof(LoginPage)); {/ 1}}

但已实施的LoginPage需要遵循abstract class的结构并继承自Activity

3 个答案:

答案 0 :(得分:0)

在C#中,您要查找的字词是interface

您无法在接口定义中实现任何方法,但您可以在那里声明它们。

public interface LoginPage {
  void doPageSetup();
  void checkLogin();
  //...
}
public class SpecificLoginPage : Activity, LoginPage {
  void doPageSetup() {
  }
  void checkLogin() {
  }
  //...
}

答案 1 :(得分:0)

听起来你想要使用两个选项。

  1. 如果您想共享UI代码,请考虑使用Xamarin.Forms。 Xamarin.Forms是一个跨平台抽象,允许您开发UI,并最终使用平台上的本机UI元素。
  2. 您的第二个选择是使用MVVM模式。 MVVMCross框架非常流行且非常强大。如果您不熟悉MVVM,请查阅它,这是一个非常强大的模式,可以在跨平台应用程序中共享代码(使用MVVMCross)。
  3. 任何一个选项都取决于您的要求,而且确实没有对错选项。它将取决于您定位的平台以及您的应用目标。

答案 2 :(得分:0)

Saphire让我详细说明这个评论:

  

您可以考虑使用委派而不是继承。如果LoginPage类不知道实际UI的细节,那么它可能是MVC(或MPC)设计模式的Model部分,并且活动应该引用LoginPage而不是"是" 34;登录页面

Model-View-Presenter(MVP)是一种设计模式,通常适用于具有用户界面的应用程序。目的是将应用程序分成三个可以相对独立实现的角色:]

  • 视图的作用是绘制屏幕并为用户提供点击或输入的位置。

    • 示例:可以输入登录ID的文本视图。
    • 在Android术语中,查看包含嵌套视图的布局/视图组。
  • 模型的作用是保存域名或业务数据:

    • 示例:登录凭据以及它们是否有效。
    • 这不是特定于平台的。登录状态发生在您运行的任何平台上。
  • Presenter 的作用是充当视图和模型之间的粘合剂。
    • 当用户单击[登录]按钮时,活动(表现为演示者)从视图中提取文本(不用担心它是什么类型的视图)并发送"用户想要的日志 - 在与 - 这些-凭证"请求登录[模型]。
    • 当LoginPage [Model]响应,OK或DENIED时,Activity [Presenter]使用该信息更新View中的相应元素,甚至可能启动一个新的Activity。

我建议的是,由于LoginPage与plaform无关,因此它可能正在扮演模型的角色。我将根据您的判断判断MVP模式是否适合您的设计。

This Wikipedia page: 提供了对模型 - 视图 - 演示者的更详细说明。