【问题标题】:Passing an ID from startActivityForResult to onActivityResult将 ID 从 startActivityForResult 传递给 onActivityResult
【发布时间】:2011-07-18 19:19:12
【问题描述】:

我有一个带有 ContextMenu 条目的 ListView,它以 startActivityForResult 启动用户照片库,因此他可以选择一个图像以将其与 ListItem 相关联。选择图像效果很好,我从 Intent 中获取图像 uri 传递给 onActivityResult

问题是,我没有在 onActivityResult 中获得 ListItem 的 ID。 我试图将它附加到我通过 putExtra 传递给 startActivityForResult 的意图,但我在 onActivityResult 中收到的意图显然不再相同了。

有没有办法将此信息传递给 onActivityResult?这是我的代码:

private void pickPhoto(long itemId) {
    Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    i.putExtra(ITEM_ID, itemId);
    startActivityForResult(i, PICK_PHOTO_REQUEST);
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case PICK_PHOTO_REQUEST:

        long itemId = data.getLongExtra(ITEM_ID, 0);
        long imageId = ContentUris.parseId(data.getData());

        // That here says itemId is 0:
        Log.d(TAG, "adding image " + imageId + " to item " + itemId);

        setPhoto(itemId, imageId);
        break;

    default:
        super.onActivityResult(requestCode, resultCode, data);
    }
}

感谢!

【问题讨论】:

  • 您是否检查过设置为 Intent extra 的 itemId 是什么?
  • 是的,现在我做到了。它不是 0。所以这里的一切似乎都是正确的。
  • 你尝试过使用intent.hasExtra(ITEM_ID);
  • 是的,这是错误的。看起来这实际上只是一个新创建的返回所选图像 uri 的意图,而不是启动 Activity 的意图。

标签: android android-activity android-intent


【解决方案1】:

好的,我现在将 id 存储在一个字段变量中,这样就可以了。虽然我对这个解决方案不太满意,因为如果用户同时启动两个请求,它会失败。更像是一种黑客攻击。

【讨论】:

    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2019-01-24
    相关资源
    最近更新 更多