【问题标题】:Android Fragments: Sharing Code with Dual UIs (stack-of-cards phone and side-by-side tablet)Android Fragments:使用双 UI 共享代码(卡片式手机和并排平板电脑)
【发布时间】:2013-09-05 20:31:52
【问题描述】:

我有一个典型的双 UI 场景 - 一个类别列表,当单击一个类别时,会加载一个类别详细信息片段,其中包含该类别中的项目列表。在手机上,它被实现为卡片式 UI,在类别列表顶部的单独活动中打开详细信息。在平板电脑上,它是左侧的类别列表,右侧是详细信息。

在详细信息窗格中,有一个用于添加项目的按钮。详细信息片段有一个接口,是活动所需的,带有一个 onClickAddItem 方法,它应该会弹出一个 DialogFragment 来询问您项目的详细信息并在它返回时添加它。

问题:平板版的一体机Activity和手机的独立详情Activity都需要相同的onClickAddItem逻辑。我的内心深处有一种下沉的感觉,正确的解决方案是将逻辑拉到另一个类中,但是需要创建数百万个文件来在 Android 中做简单的事情正在慢慢让我发疯,所以我希望我在这里忽略了另一个最佳实践。谢谢!

【问题讨论】:

  • 你的onClickAddItem 方法只会被细节片段调用?
  • 正确。我试图不将片段与数据库访问方面联系起来。

标签: android android-activity android-fragments reusability


【解决方案1】:

如果您的“添加”按钮位于详细信息片段中,则没有理由在活动中处理单击事件。 我认为您应该将点击事件处理放在您的详细信息片段中。

为什么要在活动中保留所有数据库访问?确保您正确地抽象了数据库访问(例如使用ContentProvider)并且不要害羞地在任何有意义的地方使用您的抽象。使用ContentProvider 添加项目应该很简单:

getContentResolver().insert(myUri, myNewItemContentValues);

如果您需要显示一个对话框,只需从详细信息片段中获取对当前活动的引用,并使用它来显示您的对话框。

如果多个片段共享相同的功能,您可能需要编写一个简单的帮助类,其中包含一些方法,例如:

public void showAddItemDialog(Activity activity)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多