私はlistViewでsharedPreferencesから選択したアイテムも削除します。しかし、私はリストビューから項目を削除した後、それはまだsharedPreferecesに残っています。 SharedPreferencesからデータを表示すると、データがまったく変更されないためです。誰も私はこの問題を解決するのに役立つことができますか? ありがとうAndroidスタジオでSharedPreferences内のArraylistからアイテムを削除
SharedPreferences.Java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import com.amobi.picassogridview.model.Product;
import com.google.gson.Gson;
public class SharedPreference {
public static final String PREFS_NAME = "PRODUCT_APP";
public static final String FAVORITES = "Product_Favorite";
public SharedPreference() {
super();
}
// This four methods are used for maintaining favorites.
public void saveFavorites(Context context, List<Product> favorites) {
SharedPreferences settings;
Editor editor;
settings = context.getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
editor = settings.edit();
Gson gson = new Gson();
String jsonFavorites = gson.toJson(favorites);
editor.putString(FAVORITES, jsonFavorites);
editor.commit();
}
public void addFavorite(Context context, Product product) {
List<Product> favorites = getFavorites(context);
if (favorites == null)
favorites = new ArrayList<Product>();
favorites.add(product);
saveFavorites(context, favorites);
}
public void removeFavorite(Context context, Product product) {
ArrayList<Product> favorites = getFavorites(context);
if (favorites != null) {
favorites.remove(product);
saveFavorites(context, favorites);
}
}
public ArrayList<Product> getFavorites(Context context) {
SharedPreferences settings;
List<Product> favorites;
settings = context.getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
if (settings.contains(FAVORITES)) {
String jsonFavorites = settings.getString(FAVORITES, null);
Gson gson = new Gson();
Product[] favoriteItems = gson.fromJson(jsonFavorites,
Product[].class);
favorites = Arrays.asList(favoriteItems);
favorites = new ArrayList<Product>(favorites);
} else
return null;
return (ArrayList<Product>) favorites;
}
}
CartActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.amobi.picassogridview.adapter.ProductListAdapter;
import com.amobi.picassogridview.model.Product;
import com.amobi.picassogridview.utils.SharedPreference;
import java.util.List;
public class cartActivity extends AppCompatActivity {
public static final String ARG_ITEM_ID = "favorite_list";
ListView favoriteList;
SharedPreference sharedPreference;
List<Product> favorites;
ProductListAdapter productListAdapter;
Button home;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cart);
sharedPreference = new SharedPreference();
favorites = sharedPreference.getFavorites(this);
favoriteList = (ListView) findViewById(R.id.listView);
if (favorites == null) {
Toast.makeText(cartActivity.this, "Error - No Data Available", Toast.LENGTH_SHORT).show();
} else {
if (favorites.size() == 0) {
Toast.makeText(this, "Anda Belum Punya Belanjaan", Toast.LENGTH_SHORT).show();
}
if (favorites != null) {
productListAdapter = new ProductListAdapter(this, favorites);
favoriteList.setAdapter(productListAdapter);
favoriteList.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
sharedPreference.removeFavorite(cartActivity.this, favorites.get(position));
favorites.remove(position);
productListAdapter.notifyDataSetChanged();
Toast.makeText(cartActivity.this, "Success Remove",Toast.LENGTH_SHORT).show();
return true;
}
});
}
}
home=(Button) findViewById(R.id.bbtnHome);
home.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
@Override
public void onResume()
{
super.onResume();
}
}
この行 'editor.commit()'を 'editor.apply();'に置き換えてみてください。 –
他には@ShreeKrishna –
がありますか? –