Java 显示需要扩展类的多个控件的最佳实践?

Java 显示需要扩展类的多个控件的最佳实践?,java,android,Java,Android,如果我想在我的活动中显示地图视图,我必须从地图活动扩展我的类。如果我想显示一个选项卡式的界面,我必须从TabActivity扩展我的类。其他一些控件的情况也类似,这些控件要求用户类从特定类扩展 假设在我的活动中我想显示一个地图视图,用于显示谷歌地图,以及一个选项卡视图,用于显示一些其他数据。我不能直接这样做,因为Java不支持多重继承。我的问题是如何实现这种情况?如何在活动中显示多个控件,其中每个控件都要求您的类从特定类扩展。首先有可能吗?如果是,实现该场景的最佳实践是什么 更新我想实现这一点

如果我想在我的
活动
中显示
地图视图
,我必须从
地图活动
扩展我的
。如果我想显示一个
选项卡式的
界面,我必须从
TabActivity
扩展我的
。其他一些控件的情况也类似,这些控件要求用户类从特定类扩展

假设在我的
活动中
我想显示一个
地图视图
,用于显示谷歌地图,以及一个
选项卡视图
,用于显示一些其他数据。我不能直接这样做,因为Java不支持多重继承。我的问题是如何实现这种情况?如何在活动中显示多个控件,其中每个控件都要求您的类从特定类扩展。首先有可能吗?如果是,实现该场景的最佳实践是什么

更新我想实现这一点


我使用Map和Tab作为示例。我想知道您一般如何处理这种情况?

您可以通过对象组合来构建它。起初我不确定如何启动活动并将其添加到布局中,但后来我发现了允许您将其他活动嵌入视图的方法。请注意,自API级别11以来,此类已被弃用。在任何情况下,以下是嵌入其他需要扩展为
视图的活动的步骤:

  • 创建一个
    LocalActivityManager
    ,以便在活动中创建活动
  • 启动要嵌入的活动并通过获取视图
  • 在布局中添加视图
下面是我在活动中尝试的测试代码


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Create local activity manager so that I could start my activity 
    LocalActivityManager localActivityManager  = new LocalActivityManager(this, true);
    // dispatch the onCreate from this manager
    localActivityManager.dispatchCreate(savedInstanceState);

    // layout to hold the activity, optionally this could be set through XML file
    LinearLayout layout = new LinearLayout(this);
    layout.setOrientation(LinearLayout.VERTICAL);
    this.addContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,
            ViewGroup.LayoutParams.FILL_PARENT));

    // start the activity which is in this example is an extension of a TabActivity
    Intent tabIntent = new Intent(this, DummyTabActivity.class);
    Window tabWindow = localActivityManager.startActivity("tabView", tabIntent);
    View tabView = tabWindow.getDecorView();

    // start the activity that extends MapActivity
    Intent mapIntent = new Intent(this, DummyMapView.class);
    Window mapViewWindow = localActivityManager.startActivity("mapView", mapIntent);
    View mapView = mapViewWindow.getDecorView();

    // dispatch resume to the Activities
    localActivityManager.dispatchResume();

    // add to the tabView, optionally you could use other layout as well
    layout.addView(tabView);
    // add to the mapView, optionally you could use other layout as well
    layout.addView(mapView);
}

我有限的实验表明,通过上述方法进行的对象合成将实现您想要做的事情。话虽如此,我不确定这种做法有多普遍。如果没有您的问题,我可能不会寻找上面的方法,但是您的用例很有趣,并且可能适用于将来的使用。我将查看Fragment,看看是否可以对其执行相同的操作,并更新我的答案(如果适用)。

在这种情况下,很简单:您可以在
选项卡Activity
中使用
MapActivity
(它的设计目的是将活动作为选项卡进行管理)

作为一般方法,我总是喜欢使用视图并将它们嵌套在活动中。我从不使用像
ListActivity
这样的东西。他们应该让事情变得更简单,但在我看来,这通常是一个糟糕的设计决策。我从来没有面对过这样一个事实:我必须将两个活动结合起来(除了
TabActivity


你可以看看。似乎活动从来就没有打算这样使用。我认为你所描述的情况就是我们介绍的原因。

你没有抓住要点。我的问题是如何使用需要扩展类的“并排”两个CONTROL。我知道我可以将MapView放在TabView中“如果”我想要我的MapView“放在”MapView中“你说得对,我不明白这个问题(和刚才回答的其他人一样)。也许你可以澄清这个问题?您提问的方式似乎在询问如何同时使用TabView和MapView。根据您的评论,我猜您是在问如何使用多个依赖于扩展其他类的控件?我刚才看到了您的图表:),现在情况更清楚了。看起来没有明显的方法可以做到这一点(在Android中)。让我检查一下,然后再回复。@HarisHasan我已经更新了答案以更好地反映问题:)基本上我使用对象组合(这是常见的)来包含视图,唯一的问题是我不知道使用LocalActivityManager的方法有多普遍。我还没有找到从其他活动中开始活动的其他方法。我将查看新的片段API,看看是否可以用它更新我的答案。