「会場」、都市の場所のリストビューがあります。それをクリックすると、ID を使用して会場ページに移動します。
この会場ページには、+ が付いた小さな追加ボタンがあります。あなたがこれを押すとき、私は必要です:
- 共有設定から他のお気に入りのリストを取得するために、カンマ区切りの文字列として保存し、整数のリストに変換しました
- このアイテムのIDを追加
- 整数のリストをカンマ区切りの文字列に再変換します。
- この文字列を同じキーの下に保存します。「fav」を使用しました
ボタンの画像をさらに変更すると、+ が - になります。
私はこれを行うことができたと思いました.私のコードは私の投稿の一番下にあります.
今私の問題です、私のお気に入りの文字列は実際には保存されていません。なんらかの理由で (理由がわからない) 会場を開くたびに、共有設定から取得した文字列に null と 333 の 2 つの値があります。スタートアップアクティビティでは、もちろんコミットを使用しましたが、それでも同じ戻り値がありました。特に 333 は非常に奇妙だと思いますが、null を文字列に保存する可能性も排除したと思いました。
今何が起こるか: ボタンをクリックすると、ほとんどの場合、最初は反応しません。2回目くらいで、プロセスをログに記録すると、IDが共有設定に追加され、ボタンがうまく変化しました。次に、別のプレスでは、ほとんどの場合、最初は再び反応がなく、2 回目はお気に入りから削除され、ボタンが変更されます。
しかし、アクティビティを離れて別の ID で同じアクティビティを開くと、文字列には null と 333 の値しかありません。
final int favID = id;
btFavourite.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isFavourite(favID)){
btFavourite.setBackgroundResource(R.drawable.btn_favourites_remove);
DeleteFavourite(favID);
}else{
btFavourite.setBackgroundResource(R.drawable.btn_favourites_add);
MakeFavourite(favID);
}
}
});
}
private void SaveFavourites(List<Integer> favs){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
String commSepFavs = IntArrToComSepString(favs);
editor.putString("favs", commSepFavs);
editor.commit();
}
private List<Integer> LoadFavourites(){
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
String favStr = sharedPreferences.getString("favs", "");
System.out.println(favStr);
if (favStr != null){
return CommaSepStringToIntArr(favStr);
}else{
return null;
}
}
public List<Integer> CommaSepStringToIntArr(String input){
List <Integer> favs= new ArrayList<Integer>();
String[] separated = null;
separated = input.split(",");
System.out.println("separated lengte " + separated.length);
String tijdelSep;
for (int i=0;i<separated.length;i++){
tijdelSep = separated[i].replace(",","").trim();
System.out.println("tijdelSep "+i+" = " + tijdelSep);
if(tijdelSep != null && tijdelSep.equals("")==false &&tijdelSep.equals("null")==false){
favs.add(Integer.parseInt(tijdelSep));
}
}
return favs;
}
public String IntArrToComSepString(List<Integer> favs){
String comSepFavs = null;
for (int i=0;i<favs.size();i++){
comSepFavs = comSepFavs +","+String.valueOf(favs.get(i));
}
return comSepFavs;
}
public boolean isFavourite(int id){
boolean isFav = false;
List<Integer> favs = LoadFavourites();
for (int i=0;i<favs.size();i++){
if(favs.get(i)==id){
isFav=true;
}
}
return isFav;
}
public void MakeFavourite(int id){
List<Integer> favs = LoadFavourites();
List<Integer> newfavs = new ArrayList<Integer>();
for (int i=0;i<favs.size();i++){
newfavs.add(favs.get(i));
}
newfavs.add(id);
SaveFavourites(newfavs);
}
public void DeleteFavourite(int id){
List<Integer> favs = LoadFavourites();
List<Integer> newfavs = new ArrayList<Integer>();
int j=0;
for (int i=0;i<favs.size();i++){
if(favs.get(i) != id){
newfavs.add(favs.get(i));
j++;
}
}
SaveFavourites(newfavs);
}