Android用户界面继承

时间:2018-11-30 09:35:22

标签: android user-interface inheritance xamarin.android

我是android编程的新手,不知道我的问题解决方案的正确方向是什么。我玩了五天才走上正确的轨道,但仍然没有答案。我猜那里有一些帖子,其中包含必需的信息,但是显然,我没有找到正确的搜索输入来将它们列出。

这是我的问题:
正如我来自 C# WinForms 一样,我习惯于通过继承来开发用户界面。 android中的预期方式如何?

示例:
我有一个主表单FormBase,其中包含一个退出按钮和一个占位符,用于其他GUI组件。然后,我有两个类FormAFormC,它们都从FormBase继承。
FormAFormBase的占位符上实现一个listox。
FormC实现了一些文本框和按钮(可以是其他任何东西)。

现在,根据应用程序状态,主要的应用程序逻辑在FormAFormC之间切换。

为了使我的问题更具体,如何在android中实现这种行为?当应用程序启动时,它将连接到某种网络服务。该服务将告诉应用程序当前 Dialog / Activity / Fragment 当前处于活动状态。从FormAFormC的更改可以通过网络启动!

在Android中编写此类应用程序的“干净”和“待做”方法是什么?由于android框架设计无法与.NET winforms相提并论,所以我希望有些东西可以完全不同。

感谢您阅读本文。

像素

1 个答案:

答案 0 :(得分:0)

我在这里回答自己的问题,因为问题本身保持不变。我只是有一个想法可以解决我的问题。因此,我认为该帖子应单独评论。也许我的想法违反了所有设计规则?让我知道您对此有何看法。

描述有些棘手,所以希望您理解我的意思。

  

请注意。我正在用Xamarin C#编写代码。但其结构应与android java代码相当。

好吧,我们走吧...

布局

  • 我有一个带有布局xml的活动,该xml具有一个FrameLayout(@ id / frame_base)作为片段的占位符。
  • 我有一个布局xml(fragment_base.axml),其中有两个FrameLayout(@ id / frame_left和@ id / frame_right)作为即将出现的片段的占位符。
  • 我有一个布局xml(fragment_A.axml),只有一个带有文本“ A”的巨大按钮。
  • 我有一个布局xml(fragment_B.axml),只有一个带有文本'B'的巨大按钮。

这个想法是,占位符frame_base将由包含占位符fragment_base的xml布局frame_left来扩展,而xml布局{{1} }或fragment_A

片段

  • 我有一个fragment_B派生的FragmentBase
  • 我有一个Android.Support.V4.App.Fragment派生的FragmentA
  • 我有一个FragmentBase派生的FragmentB

FragmentBase方法中,我将该调用转发到基类FragmentA::OnCreateView(..),该基类将使用FragmentBase::OnCreateView(..) xml布局为视图组容器充气。我们记得,此布局包含ID为fragment_base的占位符。我们可以在frame_left返回后使用膨胀视图“查找”占位符。拥有FragmentBase::OnCreateView(..)视图后,我们用frame_left xml布局对其进行充气。

在FragmentB中,我们做的完全相同。当然,我们使用相应的“ B”文件和类。

这是一些代码...

FragmentA类

fragment_A

FragmentBase类

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
  // Inflate frame_base
  var view = base.OnCreateView(inflater, container, savedInstanceState);

  // Inflate frame_left
  var leftFrame = view.FindViewById<ViewGroup>(Resource.Id.frame_left);
  inflater.Inflate(Resource.Layout.fragment_A, leftFrame, true); // The 'true' is important!

  return view;
}

活动

对于此解决方案,我需要一个活动。为了进行测试,我使用了一些工具栏按钮在FragmentA和FragmentB之间切换。对我来说重要的是,我现在能够实例化FragmentA,并且还生成了FrameBase的底层布局和逻辑。快速查看代码:

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
  return inflater.Inflate(Resource.Layout.fragment_base, container, false);
}

结论

就这样,嗯……似乎有效。
但是我不确定这种布局/类的玩法是否是预期的android框架生活方式。

让我知道您的想法吗?也许您有更好的解决方案?