メインのフラグメント内の各行にブックマークアイコン付きの着信音のリストビューがあります。 (メインのFragment内のブックマークアイコンをクリックすると、その特定の行データが共有設定に保存され、お気に入りのFragmentに追加されます)。共有設定からデータを取得した後にリストビューが更新されない
私の問題は、アイテムをクリックしてお気に入りにするときにお気に入りのフラグメントにすぐに表示されないことです。私はすべてこれを試しました:
listView.requestLayout();
listView.refreshDrawableState();
listView.invalidate();
listView.invalidateViews();
adapter.notifyDataSetChanged();
どれも動作しません。または、お気に入りのフラグメントをデタッチして添付するか、アプリケーションを閉じてからもう一度開く必要があります。
お願いします。
これは私がメインフラグメント内の私の共有好み
@Override
public boolean favOnClick(int position , View v) {
ProductLight product = soundList.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 List<ProductLight> soundList = new ArrayList<ProductLight>();
.
.
.
soundList = sharedPreference.getFavorites();
adapter = new CustomLightAdapter(activity, soundList);
listView.setAdapter(adapter);
共有設定
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;
}
}
お気に入りアイテムの呼び出しメソッドfavフラグメントのリストを更新するfavボタンonclickのリストフラグメント –
editor.apply()は非同期関数です。 onSharedPreferenceChangedのインタフェースリスナーまたは代わりにeditor.commit()を使用します。 – faruk
@FarukItsDOはい、しかし、あまりにも多くのアイテムを保存するとcommit()はリストビューのスクロールを遅くします。私は途中で試してみて、うまくいきません。 – DastakWall