首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在android中将Map转换为Bundle

在android中将Map转换为Bundle
EN

Stack Overflow用户
提问于 2016-05-26 19:13:13
回答 9查看 23.6K关注 0票数 54

有没有一种简单的方法可以在没有显式迭代的情况下将Map转换为android中的Bundle?

为什么?

Firebase返回通知getData()的映射。我需要把数据传递给一个意图。以前GCM给了我一个包,所以我不需要担心这个。

EN

Stack Overflow用户

发布于 2017-01-07 13:58:23

在firebase消息传递中遇到了同样的问题,并为此创建了一个kotlin扩展函数。吉斯特来了,下面的代码。尽管我正在使用这种方法,但还是有一些注意事项:

  • 它没有涵盖所有可以放入一个包中的类型
  • 它还在开发中,还没有经过充分的测试。

考虑到这一点,请使用它作为指南,而不是一个明确的解决方案。随着它的发展,我会保持最新的要旨。

代码语言:javascript
运行
复制
import android.os.Bundle 
import android.os.IBinder
import android.os.Parcelable
import java.io.Serializable

fun <V> Map<String, V>.toBundle(bundle: Bundle = Bundle()): Bundle = bundle.apply {
  forEach {
    val k = it.key
    val v = it.value
    when (v) {
      is IBinder -> putBinder(k, v)
      is Bundle -> putBundle(k, v)
      is Byte -> putByte(k, v)
      is ByteArray -> putByteArray(k, v)
      is Char -> putChar(k, v)
      is CharArray -> putCharArray(k, v)
      is CharSequence -> putCharSequence(k, v)
      is Float -> putFloat(k, v)
      is FloatArray -> putFloatArray(k, v)
      is Parcelable -> putParcelable(k, v)
      is Serializable -> putSerializable(k, v)
      is Short -> putShort(k, v)
      is ShortArray -> putShortArray(k, v)

//      is Size -> putSize(k, v) //api 21
//      is SizeF -> putSizeF(k, v) //api 21

      else -> throw IllegalArgumentException("$v is of a type that is not currently supported")
//      is Array<*> -> TODO()
//      is List<*> -> TODO()
    }
  }
}
票数 15
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37469241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档