我有一项活动,比如说CategoriesActivity。此活动使用自定义适配器扩展ListActivity,以便为listview项设置自定义布局。此活动显示一个屏幕,其中包含用户可以从中选择单个类别的类别列表。选择后,类别标识符将返回给调用者活动。
我重复使用此活动,我的意思是,此活动是从我的应用程序中的两个不同点调用的:
在第一种情况中,ItemActivity使用startActivityForResult调用CategoryActivity。返回结果后,返回的类别标识符的相应标题将显示在ItemActivity的TextView小部件中(标题是使用类别ID从数据库中提取的)。
在第二种情况中,我需要从MainActivity调用CategoryActivity并保持CategoryActivity,直到选择了有效的类别。有效的类别是产品相关联。要知道是否有与所选类别相关联的产品,我会对SQLite数据库执行查询。
如果选择的类别有效,我想调用另一个活动来显示所选类别的产品列表。
我遇到的问题是如何在选择有效类别之前保留CategoryActivity,同时考虑到我不想在CategoryActivity中实现查询数据库的逻辑。
例如,从MainActivity我调用CategoryActivity。 CategoryActivity将选定的类别标识符返回到onActivityResult中的MainActivity。在onActivityResult中,我收到类别标识符,并查询数据库以查看是否有所选类别的产品。如果有的话没问题,我打电话给另一个活动来显示属于所选类别的产品列表但是...如果没有选择类别的产品......这里是问题....如何再次调用CategoryActivity。 ..认为这个过程可以重复多次,直到选择了有效的类别......
解决方案需要实现检查CategoryActivity中是否存在该类别的产品的逻辑,然后如果产品存在则调用另一个活动来列出产品,但我认为此解决方案不够优雅,因为此代码将被使用仅在场景2中但在场景1中不是必需的。使用此解决方案,CategoryActivity将根据调用者的行为而有所不同(例如,通过将枚举传递给将定义活动行为的intent)...这是一种优雅的方式?出于这个原因,我想从外部的CategoryActivity做这个逻辑(检查类别的产品存在)。这样做,CategoryActivity总是以相同的方式运行,也就是说,只返回所选类别,无论选择的类别是否存在产品,因为此逻辑将在CategoryActivity之外进行检查。但是这样做,在选择有效类别之前,没有办法保留CategoryActivity。
Antoher解决方案是创建一个具有相同布局但其他功能的新Activity类,但这样做我重复代码......可能更具可读性但更难维护....
那么如何摆脱这个?