7

你如何将一个物体从一个地方转移到另一个地方?

例如,我有一个带有联系人表的 ContactsView,以及相应的 ContactsActivity/Place 类。如果我想编辑联系人,我单击表格行并转到 ContactEditorPlace。ContactEditorView 如何获取要编辑的联系人?

我看到的示例似乎强调不在 Place 中传递实际的对象引用,而是在传递 String 或 id 时遇到了麻烦(例如,Expenses 示例)。除了简单的标记化之外,还有其他原因吗?有什么理由不应该在一个地方引用吗?

如果ContactEditorPlace的构造函数中没有设置对象引用,那么它是如何到达ContactEditorActivity的呢?这可以通过 EventBus 来完成,但是将单个引用传递给单个活动将是很多样板文件。

我会说我没有使用 RequestFactory。

4

3 回答 3

5

在我看来 :

在地方的构造函数中传递对象引用没有问题。这样,您可以在单击要编辑的行时轻松传递联系人参考。

但是,将整个对象用作标记可能不是一个好主意。我认为最好使用它的 id,然后在 detokenizing 时从 id 中获取对象并将其传递给构造函数。

至于费用示例,我相信这是因为他们使用请求工厂,它具有那些实体定位器,可以轻松地根据他们的 id 获取实体。

于 2011-06-07T16:14:09.873 回答
2

如果您想解耦 Places,那么您可以创建自定义事件来封装您的对象,然后通过事件总线传递此事件。

更新:

历史/地点支持是通过片段标识符完成的(这是官方术语,谷歌称它们为历史或地点令牌)。通过解析 FI(标记化)来创建位置。您可以以任何您喜欢的方式格式化 FI,但限制是它们是字符串。FI 格式可以是任何格式(例如#place/subplace:arg1:arg2)。解析 FI 并创建 Place 是分词器的工作。

在您的情况下,FI 可能是#contactedit:id。因此,您的标记器将解析此标记,创建包含要编辑的联系人 ID 的 ContactEditorPlace。

于 2011-06-07T15:50:12.890 回答
1

Place 被设计成也代表一个历史令牌。在这种情况下, Place 对象中的值成为应用程序 url 的一部分。这意味着用户可以随时将 url 放入浏览器,然后从该 url 重建 Place 对象。当您传递对象引用时,当用户仅传递 url 时,此对象不存在。我总是将放置在 Place 对象中的值用作一般规则,该值应仅用于唯一标识或重新创建应用程序的特定状态,而不是仅仅因为通过位置传递值很容易而没有值。

在这种情况下,您可以在 Place 中传递对象的 id 并从您保留在应用程序中的某个缓存中获取对象(如果它不在缓存中,则转到服务器)或直接从服务器获取对象。

于 2011-06-07T20:52:34.057 回答