gpt4 book ai didi

android - 在 Bundle 中存储 SparseBooleanArray 的最佳方式?

转载 作者:可可西里 更新时间:2023-11-01 18:49:48 31 4
gpt4 key购买 nike

当发生配置更改时,我的 ListView 复选框状态会丢失,我明白这是为什么。我尝试实现

public void onSaveInstanceState(final Bundle outState)

在我的一个 fragment 中。所以我只是想知道将我的 SparseBooleanArray 存储在 outState 中的最简单方法是什么。

此外,我有点困惑,因为 ListView 有以下方法:

getListView().getCheckedItemPositions();

这有什么用?

最佳答案

在我的例子中,我最终通过围绕 SparseBooleanArray 实现一个 Parcelable 包装器来完成它,如下所示:

import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseBooleanArray;

public class SparseBooleanArrayParcelable extends SparseBooleanArray implements Parcelable {
public static Parcelable.Creator<SparseBooleanArrayParcelable> CREATOR = new Parcelable.Creator<SparseBooleanArrayParcelable>() {
@Override
public SparseBooleanArrayParcelable createFromParcel(Parcel source) {
SparseBooleanArrayParcelable read = new SparseBooleanArrayParcelable();
int size = source.readInt();

int[] keys = new int[size];
boolean[] values = new boolean[size];

source.readIntArray(keys);
source.readBooleanArray(values);

for (int i = 0; i < size; i++) {
read.put(keys[i], values[i]);
}

return read;
}

@Override
public SparseBooleanArrayParcelable[] newArray(int size) {
return new SparseBooleanArrayParcelable[size];
}
};

public SparseBooleanArrayParcelable() {

}

public SparseBooleanArrayParcelable(SparseBooleanArray sparseBooleanArray) {
for (int i = 0; i < sparseBooleanArray.size(); i++) {
this.put(sparseBooleanArray.keyAt(i), sparseBooleanArray.valueAt(i));
}
}

@Override
public int describeContents() {
return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
int[] keys = new int[size()];
boolean[] values = new boolean[size()];

for (int i = 0; i < size(); i++) {
keys[i] = keyAt(i);
values[i] = valueAt(i);
}

dest.writeInt(size());
dest.writeIntArray(keys);
dest.writeBooleanArray(values);
}
}

这允许您通过以下操作来保存和加载 SparseBooleanArray:

Bundle bundle; //For your activity/fragment state, to include in an intent, ...
SparseBooleanArray sbarray; //Probably from your listview.getCheckedItemPositions()

//Write it
bundle.putParcelable("myBooleanArray", new SparseBooleanArrayParcelable(sbarray));

//Read it back
sbarray = (SparseBooleanArray) bundle.getParcelable("myBooleanArray");

只是我的 .02€

关于android - 在 Bundle 中存储 SparseBooleanArray 的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11270161/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com