我是android编程的新手,不知道我的问题解决方案的正确方向是什么。我玩了五天才走上正确的轨道,但仍然没有答案。我猜那里有一些帖子,其中包含必需的信息,但是显然,我没有找到正确的搜索输入来将它们列出。
这是我的问题:
正如我来自 C#和 WinForms 一样,我习惯于通过继承来开发用户界面。 android中的预期方式如何?
示例:
我有一个主表单FormBase
,其中包含一个退出按钮和一个占位符,用于其他GUI组件。然后,我有两个类FormA
和FormC
,它们都从FormBase
继承。
FormA
在FormBase
的占位符上实现一个listox。
FormC
实现了一些文本框和按钮(可以是其他任何东西)。
现在,根据应用程序状态,主要的应用程序逻辑在FormA
和FormC
之间切换。
为了使我的问题更具体,如何在android中实现这种行为?当应用程序启动时,它将连接到某种网络服务。该服务将告诉应用程序当前 Dialog / Activity / Fragment 当前处于活动状态。从FormA
到FormC
的更改可以通过网络启动!
在Android中编写此类应用程序的“干净”和“待做”方法是什么?由于android框架设计无法与.NET winforms相提并论,所以我希望有些东西可以完全不同。
感谢您阅读本文。
像素
答案 0 :(得分:0)
我在这里回答自己的问题,因为问题本身保持不变。我只是有一个想法可以解决我的问题。因此,我认为该帖子应单独评论。也许我的想法违反了所有设计规则?让我知道您对此有何看法。
描述有些棘手,所以希望您理解我的意思。
请注意。我正在用Xamarin C#编写代码。但其结构应与android java代码相当。
好吧,我们走吧...
这个想法是,占位符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框架生活方式。
让我知道您的想法吗?也许您有更好的解决方案?