2017-04-24 3 views
0

메인 조각의 각 행에있는 북마크 아이콘이있는 벨소리 목록보기가 있습니다. 그리고 그 안에 선호하는 벨소리를 보여줄 다른 조각이 있습니다. 하나의 항목을 클릭하여 즐겨 찾기로 표시하면 정상적으로 작동하며 선택한 항목이 즐겨 찾기 목록 인 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

: 내가 좋아하는로 표시 한 항목을 클릭하면

그것은 잘 작동하고 선택한 항목이 성공적으로 내가 가장 좋아하는 목록 조각에 추가됩니다.

그런 다음 방법 sharedPreference의 코드를 추가 할 수 있습니다 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"); 
관련 문제