如何使用 android 中的共享首选项更新列表 recyclerview?
How can I update the list recyclerview using shared preferences in android?
我正在使用共享首选项将数据从 ItemDetails class 发送到 OrdersFragment。我成功收到数据,但只是最后一项,它覆盖了购物车中的项目。如何使用新值更新我从 ItemDetails 发送的首选项?
这是我的物品详情class:
btn_AddToCart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
Gson gson = new Gson();
// send names
ArrayList<String> namesList = new ArrayList<>();
namesList.add(name);
String namesJson = gson.toJson(namesList);
sharedPreferences.edit().putString("names", namesJson).apply();
// send prices
ArrayList<String> pricesList = new ArrayList<>();
pricesList.add(price);
String pricesJson = gson.toJson(pricesList);
sharedPreferences.edit().putString("prices", pricesJson).apply();
}
});
这是 OrdersFragment:
SharedPreferences sharedPreferences = context.getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
Gson gson = new Gson();
// get names
ArrayList<String> namesList = new ArrayList<>();
String namesJson = sharedPreferences.getString("names", null);
String[] names = gson.fromJson(namesJson, String[].class);
if (names != null) {
namesList.clear();
namesList.addAll(Arrays.asList(names));
}
// get prices
ArrayList<String> pricesList = new ArrayList<>();
String pricesJson = sharedPreferences.getString("prices", null);
String[] prices = gson.fromJson(pricesJson, String[].class);
if (prices != null) {
pricesList.clear();
pricesList.addAll(Arrays.asList(prices));
}
RecyclerView rvOrdered = view.findViewById(R.id.rv_ordered);
rvOrdered.setLayoutManager(new LinearLayoutManager(context));
rvOrdered.setHasFixedSize(true);
//populate the orders list
ArrayList<OrderedModel> orders = new ArrayList<>();
for(int i = 0; i < namesList.size(); i++) {
orders.add(new OrderedModel(namesList.get(i), pricesList.get(i)));
}
rvOrdered.setAdapter(new OrderedRecyclerViewAdapter(context, orders));
如何更新 ItemDetails 中的列表并获取 OrdersFragment 中的所有订单而不是一个订单?我可以使用多个共享首选项吗?
我相信我必须先从片段中获取数据,然后再附加我猜的新值?
首先使用这个获取 sharedPreferences:
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String namesJson = sharedPreferences.getString("names", "");
String[] names = gson.fromJson(namesJson, String[].class);
然后创建一个新数组并将所有旧名称加上新名称:
ArrayList<String> namesArray = new ArrayList<>();
for(String n : names) {
namesArray.add(n);
}
namesArray.add(name); // add the new name here
然后再保存在ItemDetails里再发过来:
sharedPreferences.edit().putString("names", gson.toJson(namesArray)).apply();
现在您可以访问 OrdersFragment 中的所有新旧名称。对“价格”做同样的事情,效果一样。
我正在使用共享首选项将数据从 ItemDetails class 发送到 OrdersFragment。我成功收到数据,但只是最后一项,它覆盖了购物车中的项目。如何使用新值更新我从 ItemDetails 发送的首选项?
这是我的物品详情class:
btn_AddToCart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
Gson gson = new Gson();
// send names
ArrayList<String> namesList = new ArrayList<>();
namesList.add(name);
String namesJson = gson.toJson(namesList);
sharedPreferences.edit().putString("names", namesJson).apply();
// send prices
ArrayList<String> pricesList = new ArrayList<>();
pricesList.add(price);
String pricesJson = gson.toJson(pricesList);
sharedPreferences.edit().putString("prices", pricesJson).apply();
}
});
这是 OrdersFragment:
SharedPreferences sharedPreferences = context.getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
Gson gson = new Gson();
// get names
ArrayList<String> namesList = new ArrayList<>();
String namesJson = sharedPreferences.getString("names", null);
String[] names = gson.fromJson(namesJson, String[].class);
if (names != null) {
namesList.clear();
namesList.addAll(Arrays.asList(names));
}
// get prices
ArrayList<String> pricesList = new ArrayList<>();
String pricesJson = sharedPreferences.getString("prices", null);
String[] prices = gson.fromJson(pricesJson, String[].class);
if (prices != null) {
pricesList.clear();
pricesList.addAll(Arrays.asList(prices));
}
RecyclerView rvOrdered = view.findViewById(R.id.rv_ordered);
rvOrdered.setLayoutManager(new LinearLayoutManager(context));
rvOrdered.setHasFixedSize(true);
//populate the orders list
ArrayList<OrderedModel> orders = new ArrayList<>();
for(int i = 0; i < namesList.size(); i++) {
orders.add(new OrderedModel(namesList.get(i), pricesList.get(i)));
}
rvOrdered.setAdapter(new OrderedRecyclerViewAdapter(context, orders));
如何更新 ItemDetails 中的列表并获取 OrdersFragment 中的所有订单而不是一个订单?我可以使用多个共享首选项吗? 我相信我必须先从片段中获取数据,然后再附加我猜的新值?
首先使用这个获取 sharedPreferences:
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String namesJson = sharedPreferences.getString("names", "");
String[] names = gson.fromJson(namesJson, String[].class);
然后创建一个新数组并将所有旧名称加上新名称:
ArrayList<String> namesArray = new ArrayList<>();
for(String n : names) {
namesArray.add(n);
}
namesArray.add(name); // add the new name here
然后再保存在ItemDetails里再发过来:
sharedPreferences.edit().putString("names", gson.toJson(namesArray)).apply();
现在您可以访问 OrdersFragment 中的所有新旧名称。对“价格”做同样的事情,效果一样。