显示Android中不同应用程序的多个视图

时间:2015-03-23 20:16:49

标签: android module

我正在开发一个Android项目,在这个项目中,我们设计了系统的想法,任何人都应该能够为整个系统编写一个新的“模块”(该模块是一个单独的包),并让它能够只要命名空间保持不变,就与它进行交互。

要想象这一点,想象一下Manager应用程序可以跟踪数据并为系统中的其他应用程序提供ContentProvider。然后,这些应用程序可以使用此ContentProvider来读取和写入数据库的数据。这些其他应用程序是三种类型之一,一种是记录数据的传感器类型,一种使用记录数据并以某种方式对其进行汇总的分析类型,以及一种提供数据特定可视化的视图类型。

我们要做的一件事就是采取一系列视图模块并在Manager中,在同一页面上显示它们的可视化,据我所知,在这些视图中定义一个Activity或Fragment需要你打开一个带有Intent的新Activity,离开Manager并且只有一个可视化源而不是多个,这不是我们想要的预期行为是在Manager上的同一页面上显示来自多个模块的多个视图。

现在我们确实找到了一种方法(在一个应用程序中以编程方式创建视图,并从另一个类远程加载它),但感觉非常hacky,我真的想知道是否有更好的方法这样做。

我应该说这是一个教育项目(虽然不是家庭作业 - 这个问题只是使用了宝贵的资源),时间有限,所以我们没有时间来改变架构,但我认为我们是有点歪曲Android应用程序设计的预期用途。

CommonsWare询问我们如何实际加载自定义视图,具体如下:

public View getView(String packageName, String className, String viewName)
{
    String apkName = context.getPackageManager().getApplicationInfo(packageName, 0).sourceDir;
    PathClassLoader myClassLoader = new PathClassLoader(apkName, ClassLoader.getSystemClassLoader());
    Class<?> handler = Class.forName(className, true, myClassLoader);
    Constructor[] m = handler.getConstructors();
    View returnView = null;
    for(int i = 0; i < m.length;i++)
    {
        if(m[i].getName().contains(viewName))
        {
            Log.i("Blah", m[i].getName());
            returnView = (View)m[i].newInstance(new Object[]{context});

        }
    }
}

0 个答案:

没有答案