java - 如果更新了可绘制文件夹,共享首选项无法正确保存可绘制资源 ID

标签 java android

我有一个自定义对象卡()` 公共(public)卡(字符串元素,字符串颜色,int ResourceId,int CardNumber,字符串特殊){

    mResourceId = ResourceId ;
    mCardNumber = CardNumber ;
    mElement = Element ;
    mColor = Color ;
    mSpecial=Special;
}`

mResourceId 是卡片图像的可绘制对象 当我将 Card 类型的 Arraylist 保存到共享首选项,然后将单个图像添加到可绘制文件夹并更新应用程序时,Arraylist 的所有 Card ResourceId 都会混合并且无法正确显示 The normal images of the arraylist of Cards

incorrect images replace the cards after adding some new images to the drawable folder and updating the app

我确信添加到可绘制文件夹中的新图像名称与现有图像的任何名称都不匹配

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);
}

}

最佳答案

资源 ID 是随着应用程序更新动态生成的。因此在您的情况下它会失败。

您可以尝试将资源的名称存储在共享首选项中,并使用该名称来获取资源的 id。

    Resources resources = getResources();
    String resourceName = resources.getResourceEntryName(R.drawable.resource);

然后您可以从共享首选项中检索 ID。

intresId = resources.getIdentifier(resourceName, "drawable", "your.package.name");

关于java - 如果更新了可绘制文件夹,共享首选项无法正确保存可绘制资源 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51848306/

相关文章:

java - 如何在 Android 中使用已保存的实例状态和通过微调器恢复实例状态?

java - 使用唯一 ID 从 firebase 检索数据

Java 8 使用流和收集器映射到集合的子列表条目

java - onPause() onStop() onResume() 之间的混淆

android - Twitter4J 不支持哪些版本的 Android?

android - JB 和 ICS 中的沉浸式功能

android - 如何在Gradle中添加系统权限

java - 在java中使用oauth调用Linkedin api

java - 检测一个字符串是否只由一种字符组成

java - 编译应用程序后找不到主类