簡體   English   中英

如何使用 android 中的共享首選項更新列表 recyclerview?

[英]How can I update the list recyclerview using shared preferences in android?

我正在使用共享首選項將數據從 ItemDetails class 發送到 OrdersFragment。 我成功收到數據,但只是最后一項,它覆蓋了購物車中的項目。 如何使用新值更新從 ItemDetails 發送的首選項?

這是我的 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 中的所有訂單而不是一個? 我可以使用多個共享首選項嗎? 我相信我必須先從片段中獲取數據,然后再從 append 獲取我猜的新值?

首先使用以下方法獲取 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 中的所有新舊名稱。 對“價格”做同樣的事情,它的工作原理是一樣的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM