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 + "]";
}
}
我不知道怎么做是正确的,你能帮助我,好吗?
可以添加方法sharedPreference的代码。在ProductLight中加入收藏夹这里 – Avi
第一个值是整数是那首歌的索引?如果是的话,这应该从0开始,如果不是,那么它有什么用处。 – Avi
@Avi这些是音调的编号,你的意思是我应该为ProductLight构造函数中的铃声添加另一个int!? – Majid