Android碎片:与双UI共享代码(一叠卡片手机和并排平板电脑)
我有一个典型的双UI场景——一个类别列表,当单击其中一个时,会加载一个类别详细信息片段,其中包含该类别中的项目列表。在手机上,它实现为一堆卡片UI,在类别列表顶部的单独活动中打开详细信息。在平板电脑上,左边是分类列表,右边是详细信息 在详细信息窗格中,有一个用于添加项目的按钮。details片段有一个接口,是Activities所必需的,带有onClickAddItem方法,该方法应显示一个DialogFragment,询问您项目的详细信息,并在项目返回时添加它 问题在于:平板电脑版本的一体式活动和手机的独立详细信息活动都需要相同的onClickAddItem逻辑。我内心深处有一种沉痛的感觉,正确的解决方案是将这种逻辑拉到另一个类中,但在Android中创建数百万个文件来做简单的事情的需要正慢慢让我发疯,所以我希望这里还有另一个我忽略的最佳实践。谢谢 如果“添加”按钮位于详细信息片段中,则没有理由在活动中处理单击事件。 我认为你应该把点击事件处理放在你的细节片段中 为什么要保留活动中的所有数据库访问?确保正确地抽象数据库访问(例如使用Android碎片:与双UI共享代码(一叠卡片手机和并排平板电脑),android,android-activity,android-fragments,reusability,Android,Android Activity,Android Fragments,Reusability,我有一个典型的双UI场景——一个类别列表,当单击其中一个时,会加载一个类别详细信息片段,其中包含该类别中的项目列表。在手机上,它实现为一堆卡片UI,在类别列表顶部的单独活动中打开详细信息。在平板电脑上,左边是分类列表,右边是详细信息 在详细信息窗格中,有一个用于添加项目的按钮。details片段有一个接口,是Activities所必需的,带有onClickAddItem方法,该方法应显示一个DialogFragment,询问您项目的详细信息,并在项目返回时添加它 问题在于:平板电脑版本的一体式活
ContentProvider
),并且不要羞于在任何有意义的地方使用抽象。使用ContentProvider
添加项目应该非常简单:
getContentResolver().insert(myUri, myNewItemContentValues);
如果您需要显示一个对话框,只需从细节片段中获取对当前活动的引用,并使用它来显示您的对话框
如果多个片段共享相同的功能,则可能需要使用以下方法编写一个简单的帮助器类:
public void showAddItemDialog(Activity activity)
您的
onClickAddItem
方法将仅由细节片段调用?正确。我试图不把这个片段与数据库访问方面联系起来。