【问题标题】:Android Bundle with SparseArray<String>带有 SparseArray<String> 的 Android Bundle
【发布时间】:2013-04-27 13:34:01
【问题描述】:

我需要在一个 Bundle 中存储两个 SparseArray。

原来是这样:

    protected void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);

        state.putSparseParcelableArray("guybrushInsulti", (SparseArray<String>) gameEngine.getDialogs().getInsultKnow());
        state.putSparseParcelableArray("guybrushControInsulti",(SparseArray<String>) gameEngine.getDialogs().getControInsultKnow());
        state.putSerializable("level", gameEngine.getWorld().getLevel());   
}

Eclipse 说:

The method putSparseParcelableArray(String, SparseArray<? extends Parcelable>) in the type Bundle is not applicable for the arguments (String, SparseArray<String>)

OnRestoreInstanceState:

 @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    SparseArray<String> mInsultiKnow = savedInstanceState.getSparseParcelableArray("guybrushInsulti");
    SparseArray<String> mControInsultiKnow = savedInstanceState.getSparseParcelableArray("guybrushControInsulti");

        //Ripristino insulti
        gameEngine.getDialogs().loadControInsult(mLevel , true);
        gameEngine.getDialogs().loadInsult(mLevel, true, mInsultiKnow, mControInsultiKnow);
}

错误:

Bound mismatch: The generic method getSparseParcelableArray(String) of type Bundle is not applicable for the arguments (String). The inferred type String is not a valid substitute for the bounded parameter <T extends Parcelable>

我的问题是什么? :(

【问题讨论】:

  • 所以我需要扩展 SparseArray 并实现 Parcelable?
  • 我创建了一个 SparseArrayParcelable extends SparseArray&lt;String&gt; implements Parcelable 但 Eclipse 说:The method putSparseParcelableArray(String, SparseArray&lt;? extends Parcelable&gt;) in the type Bundle is not applicable for the arguments (String, SparseArrayParcelable)

标签: android bundle


【解决方案1】:

在您的情况下(SparseArray 是字符串),我认为您不能使用该方法(putSparseParcelableArray)。

该方法只能在稀疏数组的Object类型实现Parcelable接口,而String类没有实现的情况下使用。

参考:http://developer.android.com/reference/java/lang/String.html

在我们没有得到任何具体解决方案之前,您可以这样做, 在保存 SparseArray 时,将此数据放入列表中并将该列表保存到 outState 包中。

然后在 onRestoreInstanceState 中,检索列表并再次将其转换为 SparseArray。

【讨论】:

  • 我已经解决了实现从 SparseArray 中提取 Keys int 数组并将其传递给 Bundle 的反汇编/构建器方法。在恢复时,builder() 从键数组构建 SparseArray ;)
  • 嗨@Webserveis 你可以在这里找到项目源代码:int33h.com/test/mi/miapksrc.rar 虽然不能保证事情像 6 年前一样工作。在那个项目之后我停止了在 Android 上的工作。
猜你喜欢
  • 2014-09-10
  • 1970-01-01
  • 2018-01-17
  • 2016-05-24
  • 2016-08-01
  • 2017-03-04
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
相关资源
最近更新 更多