Android 将音频索引存储在共享首选项中
我有一个铃声列表视图,在我的主片段中的每一行都有一个书签图标。我还有另一个片段来展示它里面最受欢迎的铃声。 当我点击一个项目将其标记为收藏夹时,它将正常工作,所选项目将成功添加到我的收藏夹列表片段中。但问题是这不适用于铃声(Android 将音频索引存储在共享首选项中,android,listview,android-fragments,sharedpreferences,Android,Listview,Android Fragments,Sharedpreferences,我有一个铃声列表视图,在我的主片段中的每一行都有一个书签图标。我还有另一个片段来展示它里面最受欢迎的铃声。 当我点击一个项目将其标记为收藏夹时,它将正常工作,所选项目将成功添加到我的收藏夹列表片段中。但问题是这不适用于铃声(songID)。例如,如果我选择项目#2,它将在收藏夹片段中添加项目#2,但它将播放第一个原始音频 在我的主要片段中 private final int[] songID = { R.raw.aaa, R.raw.bbb, R.raw.ccc}; private List
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);
private final int[] songID = { R.raw.aaa, R.raw.bbb, R.raw.ccc};
private List<ProductLight> songList = new ArrayList<ProductLight>();
songList = sharedPreference.getFavorites();
在我最喜欢的片段中
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);
private final int[] songID = { R.raw.aaa, R.raw.bbb, R.raw.ccc};
private List<ProductLight> songList = new ArrayList<ProductLight>();
songList = sharedPreference.getFavorites();
private final int[]songID={R.raw.aaa,R.raw.bbb,R.raw.ccc};
private List songList=new ArrayList();
songList=SharedReference.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 + "]";
}
}
公共类共享参考灯{
公共静态最终字符串PREFS_NAME=“Light_Products”;
public static final String FAVORITES=“Favorite\u Tones\u Light”;
共享引用设置;
SharedReferences.Editor;
Gson Gson=新的Gson();
公共共享参考灯(上下文){
设置=context.getSharedReferences(PREFS\u NAME,context.MODE\u PRIVATE);
editor=settings.edit();
}
//这四种方法用于维护收藏夹。
公共void保存收藏夹(列出收藏夹){
字符串jsonFavorites=gson.toJson(收藏夹);
putString(收藏夹,jsonFavorites);
editor.apply();
}
public void addFavorite(ProductLight产品){
列出收藏夹=getFavorites();
如果(收藏夹==null)
收藏夹=新的ArrayList();
收藏。添加(产品);
保存收藏夹(收藏夹);
w(“addPrefLog”,favorites.toString());
}
public void removeFavorite(ProductLight产品){
ArrayList favorites=getFavorites();
如果(收藏夹!=null){
收藏。删除(产品);
保存收藏夹(收藏夹);
}
}
公共阵列列表getFavorites(){
列出收藏夹;
如果(设置.包含(收藏夹)){
String jsonFavorites=settings.getString(收藏夹,null);
ProductLight[]favoriteItems=gson.fromJson(jsonFavorites,ProductLight[].class);
收藏夹=数组.asList(收藏夹项);
收藏夹=新的阵列列表(收藏夹);
}否则
返回null;
返回(ArrayList)收藏夹;
}
}
模型类
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 + "]";
}
}
公共类产品灯{
私有字符串标题;
私有int-id;
私人阿雷亚主义流派;
公共产品灯(int-id、字符串名称、ArrayList类型){
this.title=名称;
this.id=id;
这个。流派=流派;
}
公共布尔值=真;
私有字符串标签;
公共字符串getTag(){
返回标签;
}
公共void setTag(字符串标记){
标签=标签;
}
私人int favId;
公共int getFavId(){
返回favId;}
公共无效设置favId(内部favId){
this.favId=favId;
}
公共字符串getTitle(){
返回标题;
}
public void setTitle(字符串名称){
this.title=名称;
}
公共int getYear(){
返回id;
}
公共ArrayList getgreen(){
回归体裁;
}
公共无效集合类型(ArrayList类型){
这个。流派=流派;
}
@凌驾
公共int hashCode(){
最终整数素数=31;
int结果=1;
结果=素数*结果+id;
返回结果;
}
@凌驾
公共布尔等于(对象obj){
if(this==obj)
返回true;
if(obj==null)
返回false;
如果(getClass()!=obj.getClass())
返回false;
ProductLight其他=(ProductLight)obj;
if(id!=其他.id)
返回false;
返回true;
}
@凌驾
公共字符串toString(){
return“Product[id=“+id+”,name=“+title+”,genre=”
+体裁+“]”;
}
}
我不知道该怎么做,你能帮帮我吗?正如你所说:
当我点击一个项目将其标记为收藏夹时,它将正常工作,所选项目将成功添加到我的收藏夹列表片段中
然后尝试将另一个参数作为音频资源添加到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");
您能添加方法SharedReference.addFavorite的代码吗?ProductLight的第一个值是整数,这是歌曲的索引吗?如果是,这应该从0开始,如果不是,那么它有什么用。@Avi这些是铃声的id,您的意思是我应该在ProductLight构造函数中为铃声添加另一个int!?哪个身份证?你从哪里弄来的?