0

我有关于Android活动和AndroidManifest.xml的这个问题。当我使用Java servlet时,出现了问题,并想创建一个“基于模块”或类似于基于插件的服务器。这工作正常,我可以使用类似于此的代码方法动态加载我想要的servlet:Dynamically add a servlet to the servletConfig。服务器启动期间动态地找到并映射servlet。动态活动注册

这里的问题不是如何找到适当的活动,或如何创建它们的新实例,或者如何启动它们,我已经发现了这一部分。我可以迭代我的包并找到适当的Activity类,创建它们的新实例并将它们添加到列表中。

我一直在使用一个interface,所有的活动必须执行才能成为一个有效的活动。这样,我可以为我的应用程序创建新的部件,扩展或新功能,并且一切正常。在我的应用程序中,我有一个用户可点击的按钮列表,通过使用ListView将它们添加到我的视图中来生成按钮列表。

private void displayLoadedContent() { 
    View v = inflateLayout(R.layout.buttonlayout); 
    ListView view = (ListView) v.findViewById(R.id.list); 
    view.setAdapter(new ListButtonAdapter(this, content)); 
} 

其中content被声明为

List<MyActivityInterface> content; 

ListButtonAdapter延伸BaseAdapter

那么在那里没有问题。问题是我必须在AndroidManifest.xml中声明每一个我的活动。该文件就像是一个可能显示的活动的大名单,并且有点麻烦,所以我不打算在这里显示代码。

我意识到我不得不向清单添加一项活动,但我希望这项活动应该足够。我的方法在很多方面可以看作是Front Controller pattern,其中每个活动负责加载和显示他们所需的活动性。

我只是问是否有可能在清单中动态注册表活动(或允许它们以另一种方式运行),如果否,是否还有其他有效的解决方案?

回答

1

Android要求将每个活动提前注册在您的AndroidManifest.xml文件中。部署后,您的应用将作为.apk文件存在于设备上,该文件不能被修改(除了被更新/替换为新的APK)。

如果我正确地理解了这个问题,你根本不想在清单文件中列出大量活动? Fragments不需要在清单文件中注册,所以如果您的目标是动态更换UI组件,那就是答案。片段可通过Support library返回到1.6。

+0

如果我不得不使用碎片,那么这会限制自从Fragmens在api level 11中引入后我可以达到的用户和设备的数量。希望找到一种解决方案,不会使任何(或大的) )设备的数量。 – Heskja

+0

片段可通过[支持库](http://developer.android.com/training/basics/fragments/support-lib.html)返回1.6。 – wsanville

+0

我不知道,所以谢谢。我可能会尝试;)出于好奇,是否有人知道另一种解决方案? – Heskja