2016-05-01 4 views
0

私は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(); 
    } 

}

+0

この行 'editor.commit()'を 'editor.apply();'に置き換えてみてください。 –

+0

他には@ShreeKrishna –

+0

がありますか? –

答えて

1

refreshDisplay

public void refreshDisplay(){ 
    productListAdapter = new ProductListAdapter(this, favorites); 
    favoriteList.setAdapter(productListAdapter); 
    productListAdapter.notifyDataSetChanged(); 
} 
というメソッドを作成し、次のように試してみてくださいJavaが使用

favorites.remove(product); 

はオブジェクトを比較して検索する方法に等しい:

はその後

@Override 
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 

     sharedPreference.removeFavorite(cartActivity.this, favorites.get(position)); 
     favorites.remove(position); 
     refreshDisplay(); 
     Toast.makeText(cartActivity.this, "Success Remove",Toast.LENGTH_SHORT).show(); 

     return true; 
    } 
+0

sharedPreferencedのアイテムは削除されません。 。 ビューを見るために別のアクティビティとカムバックに行くと、すでに削除したアイテムがまだ表示されます –

+0

@NickyAprilianiアプリを再起動してもまだ表示されますか? –

+0

はいまだ表示されています –

1

チェックこの行は、私は製品がリストから削除されないと思います、のように、このメソッドを使用します1つは "同じ"、等しいです。デフォルトでは、オブジェクトへの参照(または非オブジェクトの値:int、long、...)を比較します。したがって、2つのオブジェクトが同じ参照を持たない場合(内容が同じであっても)、equalsメソッドはfalseを返します。これは、あなたの例では、SharedPreferencesからリストをもう一度ロードする場合です。

解決策の1つは、Productクラスのequalsメソッドをオーバーライドするか、自分のリストを反復して、必要な値を比較することです。

関連する問題