2017-04-24 17 views
0

メインの断片の各行にブックマークアイコン付きの着信音のリストビューがあります。そして、私はそれの中にお気に入りの着信音を表示する別の断片があります。 お気に入りをマークするために1つのアイテムをクリックすると、正常に動作し、選択したアイテムが好きなリストFragmentに正常に追加されます。しかし、問題はこれが着メロ(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

をそれらを追加してみてください。ここでaddFavorite – Avi

+0

ProductLightの最初の値は整数で、その曲のインデックスですか?もしそうなら、これは0から始まり、そうでなければ何を使用するのでしょうか? – Avi

+0

@AviこれらはトーンのIDです。ProductLightコンストラクタの着信音に別のintを追加する必要があります。 – Majid

答えて

1

:私は好きなようにそれをマークするために一つの項目をクリックすると

は、それが正常に動作しますと、選択した項目が正常に私のお気に入りリストフラグメントに追加されます。その後

あなたProductLight

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

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

}

にオーディオリソースとして別のパラメータを追加し、メソッドのsharedPreferenceのコードを追加することができますあなたのリストに

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"); 
関連する問題