sharedpreference返回整个列表而不是卡中的seleected

时间:2017-06-21 08:53:35

标签: android android-recyclerview sharedpreferences

我有两个活动,一个是"产品"另一个是" cart",我使用共享偏好来保存所选产品并将其显示在购物车活动中,问题是当我按下添加到购物车时,显示的所有产品列表不仅仅是选中的产品

我的产品适配器

public class productsAdapter extends RecyclerView.Adapter<productsAdapter.MyViewHolder> {

private Context mContext;
private List<products> productList;


public class MyViewHolder extends RecyclerView.ViewHolder {
    public TextView title, count;
    public ImageView thumbnail, cart;
    private Context context;

    public MyViewHolder(View view) {


        super(view);

        context = itemView.getContext();
        title = (TextView) view.findViewById(R.id.title);
        count = (TextView) view.findViewById(R.id.count);
        thumbnail = (ImageView) view.findViewById(R.id.thumbnail);
        cart = (ImageView) view.findViewById(R.id.cart);


    }
}


public productsAdapter(Context mContext, List<products> productList) {
    this.mContext = mContext;
    this.productList = productList;

}

@Override

public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.products_card, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, final int position) {
    final products p = productList.get(position);
    holder.title.setText(p.getName());
    holder.count.setText(p.getPrice() + "L.E");
    Glide.with(mContext).load(p.getThumbnail()).into(holder.thumbnail);
    holder.thumbnail.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent intent = new Intent(v.getContext(), product_details.class);
            Bundle bundle = new Bundle();
            bundle.putString("img", p.getThumbnail());
            bundle.putString("name", p.getName());
            bundle.putInt("price", p.getPrice());
            intent.putExtras(bundle);
            v.getContext().startActivity(intent);
        }
    });


    holder.cart.setImageResource(R.drawable.ic_shopping_cart_black_24dp);

    holder.cart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {

            holder.cart.setImageResource(R.drawable.ic_add_cart);

            SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
            SharedPreferences.Editor editor = preferences.edit();
            Gson gson = new Gson();
            String jsonFavorites = gson.toJson(productList);
            editor.putString(FAVORITES, jsonFavorites);

            editor.commit();


        }
    });
}


public int getItemCount() {

    return productList.size();
}


}

我的购物车活动

public class CartActivity extends AppCompatActivity {
Button l;
ImageView imv;
Toolbar t;
RecyclerView rv;
RecyclerView.LayoutManager layoutmanager;
RecyclerView.Adapter adapter;
List<products> cartitems;
ArrayList<products> selected_items_list = new ArrayList<>();
SharedPreference sharedPreference;
public static final String MyPREFERENCES = "MyPrefs";
int countt = 0;
boolean edit_mode = false;
TextView counterr;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_cart);

    rv = (RecyclerView) findViewById(R.id.mycartrecycler);
    layoutmanager = new LinearLayoutManager(this);
    rv.setLayoutManager(layoutmanager);

    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
    String jsonFavorites = preferences.getString(FAVORITES, null);
    Gson gson = new Gson();
    products[] favoriteItems = gson.fromJson(jsonFavorites,
            products[].class);

    cartitems = Arrays.asList(favoriteItems);
    cartitems = new ArrayList<products>(cartitems);
    adapter = new CartAdapter(cartitems, CartActivity.this);
    rv.setAdapter(adapter);

}


}

2 个答案:

答案 0 :(得分:0)

因为你在sharedpreferences中添加了整个列表..请看下面的

你这样做了......

 SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
        SharedPreferences.Editor editor = preferences.edit();
        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(productList);

1)如果您想要特定的选定结果,那么您必须使用包含详细信息(例如

)制作pojo类产品
public TextView title, count;
public ImageView thumbnail, cart;
private Context context;

并制作所有字段的getter和setter方法。

在购物车的onclick方法中,您必须通过该pojo类并在购物车活动中获取该类。那就是你如何得到你的欲望输出。

2)将所有细节添加为共享偏好字段的第二种方式,如

editor.putString("title",title.getText().toString());

并将所有计数和缩略图设置为值。

我希望它能帮到你......

答案 1 :(得分:0)

您正在productList中保存SharedPreference

试试这个

final Product product = productList.get(position);

// Some other code
holder.cart.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {

        holder.cart.setImageResource(R.drawable.ic_add_cart);

        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
        SharedPreferences.Editor editor = preferences.edit();
        Gson gson = new Gson();
        String jsonFavorites = gson.toJson(product);
        editor.putString(FAVORITES, jsonFavorites);

        editor.commit();
    }
});

在CartActivity中

Gson gson = new Gson();
Product product = gson.fromJson(jsonFavorites,
        Product.class);