2017-04-24 78 views
0

我有一个列表视图,在我的主片段中每行都有一个书签图标的铃声。我还有另一个片段可以显示其中的收藏铃声。 当我点击一个项目将其标记为收藏夹时,它将正常工作,并且所选项目将成功添加到我最喜欢的列表片段中。但问题是这不适用于铃声(songID)。例如,如果我选择项目#2,它会在收藏片段中添加项目#2,但它会播放第一个音频原始数据。在共享首选项中存储音频的索引

在我主要碎片

private final int[] songID = { R.raw.aaa, R.raw.bbb, R.raw.ccc}; 

private List<ProductLight> songList = new ArrayList<ProductLight>(); 

    ProductLight product1 = new ProductLight(1,"Song Title 1"); 
    ProductLight product2 = new ProductLight(2,"Song Title 2"); 
    ProductLight product3 = new ProductLight(3,"Song Title 3"); 

    songList = new ArrayList<ProductLight>(); 
    songList.add(product1); 
    songList.add(product2); 
    songList.add(product3); 

加入收藏逻辑:

@Override 
public boolean favOnClick(int position , View v) { 
    ProductLight product = songList.get(position); 
    ImageView button = (ImageView) v.findViewById(R.id.favImageHive); 
    String tag = button.getTag().toString(); 
    if (tag.equalsIgnoreCase("grey")) { 
     sharedPreference.addFavorite(product); 
     snackS("Added to Favorites"); 
     button.setTag("red"); 
     button.setImageResource(R.mipmap.bookmarked); 
    } else { 
     sharedPreference.removeFavorite(product); 
     button.setTag("grey"); 
     button.setImageResource(R.mipmap.bookmark_border); 
     snackS("Removed from Favorites"); 
    } 

    return true; 
} 

在我最喜欢的片段

private final int[] songID = { R.raw.aaa, R.raw.bbb, R.raw.ccc}; 

private List<ProductLight> songList = new ArrayList<ProductLight>(); 

songList = sharedPreference.getFavorites(); 

共享首

public class SharedPreference_light { 

public static final String PREFS_NAME = "Light_Products"; 
public static final String FAVORITES = "Favorite_Tones_Light"; 

SharedPreferences settings; 
SharedPreferences.Editor editor; 
Gson gson = new Gson(); 

public SharedPreference_light(Context context) { 
    settings = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    editor = settings.edit(); 
} 

// This four methods are used for maintaining favorites. 
public void saveFavorites(List<ProductLight> favorites) { 
    String jsonFavorites = gson.toJson(favorites); 
    editor.putString(FAVORITES, jsonFavorites); 
    editor.apply(); 
} 

public void addFavorite(ProductLight product) { 
    List <ProductLight> favorites = getFavorites(); 
    if (favorites == null) 
     favorites = new ArrayList<ProductLight>(); 
    favorites.add(product); 
    saveFavorites(favorites); 
    Log.w("addPrefLog", favorites.toString()); 
} 

public void removeFavorite(ProductLight product) { 
    ArrayList <ProductLight> favorites = getFavorites(); 
    if (favorites != null) { 
     favorites.remove(product); 
     saveFavorites(favorites); 
    } 
} 

public ArrayList <ProductLight> getFavorites() { 
    List<ProductLight> favorites; 
    if (settings.contains(FAVORITES)) { 
     String jsonFavorites = settings.getString(FAVORITES, null); 
     ProductLight[] favoriteItems = gson.fromJson(jsonFavorites, ProductLight[].class); 
     favorites = Arrays.asList(favoriteItems); 
     favorites = new ArrayList <ProductLight> (favorites); 
    } else 
     return null; 

    return (ArrayList <ProductLight>) favorites; 
    } 
} 

模型类

public class ProductLight { 

private String title; 
private int id; 
private ArrayList<String> genre; 

public ProductLight(int id,String name,ArrayList<String> genre){ 
    this.title = name; 
    this.id = id; 
    this.genre = genre; 
} 

public boolean paused = true; 

private String Tag; 
public String getTag() { 
    return Tag; 
} 
public void setTag(String tag) { 
    Tag = tag; 
} 

private int favId; 
public int getFavId() { 
    return favId;} 
public void setFavId(int favId) { 
    this.favId = favId; 
} 

public String getTitle() { 
    return title; 
} 
public void setTitle(String name) { 
    this.title = name; 
} 
public int getYear() { 
    return id; 
} 
public ArrayList<String> getGenre() { 
    return genre; 
} 
public void setGenre(ArrayList<String> genre) { 
    this.genre = genre; 
} 



@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + id; 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    ProductLight other = (ProductLight) obj; 
    if (id != other.id) 
     return false; 
    return true; 
} 

@Override 
public String toString() { 
    return "Product [id=" + id + ", name=" + title + ", genre=" 
      + genre + "]"; 
    } 
} 

我不知道怎么做是正确的,你能帮助我,好吗?

+0

可以添加方法sharedPreference的代码。在ProductLight中加入收藏夹这里 – Avi

+0

第一个值是整数是那首歌的索引?如果是的话,这应该从0开始,如果不是,那么它有什么用处。 – Avi

+0

@Avi这些是音调的编号,你的意思是我应该为ProductLight构造函数中的铃声添加另一个int!? – Majid

回答

1

至于你提到:

当我在一个项目点击将其标记为喜爱它会正常工作和所选择的项目会成功添加到我的最爱列表片段。

然后尝试另一个参数音频资源添加到您的ProductLight

private int res; 
    public int getRes() { 
    return res; 
} 

public ProductLight(..... int res){ 
this.res= res; 

}

并将它们添加到您的列表

ProductLight product1 = new ProductLight(1,"Song Title 1, R.raw.youraudio1"); 
ProductLight product2 = new ProductLight(2,"Song Title 2, R.raw.youraudio2"); 
ProductLight product3 = new ProductLight(3,"Song Title 3, R.raw.youraudio3");