【发布时间】:2018-08-14 19:09:40
【问题描述】:
我有一个自定义对象 Card()` public Card(String Element , String Color , int ResourceId , int CardNumber ,String Special){
mResourceId = ResourceId ;
mCardNumber = CardNumber ;
mElement = Element ;
mColor = Color ;
mSpecial=Special;
}`
mResourceId 是卡片图像的可绘制对象 当我将 Card 类型的 Arraylist 保存到 Shared Preference,然后将单个图像添加到可绘制文件夹并更新应用程序时,Arraylist 的所有 Card ResourceId 都混合在一起并且无法正确显示The normal images of the arraylist of Cards
我确信我添加到可绘制文件夹的新图像名称与现有图像的任何名称都不匹配
public class Card implements Parcelable{
private int mResourceId, mCardNumber;
private String mColor, mElement,mSpecial,mResId;
public Card(String Element , String Color , int ResourceId , int CardNumber ){
mResourceId = ResourceId ;
mCardNumber = CardNumber ;
mElement = Element ;
mColor = Color ;
}
public Card(String Element , String Color , String ResourceId , int CardNumber ){
mResId = ResourceId ;
mCardNumber = CardNumber ;
mElement = Element ;
mColor = Color ;
}
public Card(String Element , String Color , int ResourceId , int CardNumber ,String Special){
mResourceId = ResourceId ;
mCardNumber = CardNumber ;
mElement = Element ;
mColor = Color ;
mSpecial=Special;
}
protected Card(Parcel in) {
mResourceId = in.readInt();
mCardNumber = in.readInt();
mColor = in.readString();
mResId = in.readString();
mElement = in.readString();
mSpecial = in.readString();
}
public static final Creator<Card> CREATOR = new Creator<Card>() {
@Override
public Card createFromParcel(Parcel in) {
return new Card(in);
}
@Override
public Card[] newArray(int size) {
return new Card[size];
}
};
public Object getResourceId() {
if (mResId==null){return mResourceId;}
else {return mResId;}
}
public int getResourceId(Context context) {
try {
return context.getResources().getIdentifier(mResId, "drawable", context.getPackageName());
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
public void setResourceId(int ResourceId) {this.mResourceId = ResourceId;}
public void setElement(String Element) {this.mElement = Element;}
public void setCardNumber(int CardNumber) {this.mCardNumber = CardNumber;}
public int getCardNumber() {
return mCardNumber;
}
public String getCardElement() {
return mElement;
}
public String getCardColor() {
return mColor;
}
public String getSpecial() {
return mSpecial;
}
public boolean isPowerCard(){
boolean isspecial=false;
if (mSpecial==null){isspecial= false;}
else {isspecial= true;}
return isspecial;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(mResourceId);
dest.writeInt(mCardNumber);
dest.writeString(mColor);
dest.writeString(mElement);
dest.writeString(mSpecial);
}
}
【问题讨论】:
-
请注意
R.whatever资源大部分是在运行时生成的。我不确定你在问什么,但如果你想保存像图像这样的值,你必须将它们保存为 blob,或者使用高效的存储解决方案(如 Firebase) -
@ArthurAttout 什么是 blob?
-
代表二进制长对象。基本上,您存储整个图片本身,例如 JPG 或 PNG。如果您保存
R.drawable值,它只是一个在运行时引用资源的 int。但断章取义完全没有意义