【问题标题】:Why i can't save state from my CheckBox with SharedPreferences?为什么我不能使用 SharedPreferences 从我的 CheckBox 中保存状态?
【发布时间】:2018-10-13 04:09:45
【问题描述】:

这是我的代码,我什么都试了。

我需要用户在传递到另一个Activity然后返回到CheckBox,CheckBox用之前标记的值进行标记,就像一个购物清单。 Imake LOG 到 itemsString 但它是空的,我缺少什么?,我做错了什么?

我的问题是它没有给出错误

public class ingredientesSemanales extends AppCompatActivity {
    //OBTENER REFERENCIA A LA RAIZ
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    DatabaseReference ingredientes;
    ArrayList<String> selectedItems = new ArrayList<>();
    String[] items;
    ListView ch1;
    SharedPreferences preferences;
    String itemsString;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        preferences = getSharedPreferences("ItemsSelectedFromUser", Context.MODE_PRIVATE);
        setContentView(R.layout.activity_ingredientes_semanales);
        ch1 = (ListView) findViewById(R.id.checkeable_list);
        ingredientes = ref.child("Ingredientes Semanales").child("Lunes");

        ch1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

        if (preferences != null) {

            if (itemsString != null) {

                String valueFromPreferences = preferences.getString(FirebaseAuth.getInstance().getCurrentUser().getUid(), null);
                Log.d("values", valueFromPreferences.toString());
                Gson gson = new Gson();
                ArrayList values = gson.fromJson(valueFromPreferences, ArrayList.class);

                for (int i = 0; i < values.size(); i++) {
                    Log.d("values", values.toString());
                    if (selectedItems.contains(values.get(i).toString())) {
                        Log.d("selectedItems", values.get(i).toString());

                        ch1.setItemChecked(i, true);
                    }
                }

            }

        }


        /*ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.semanarow, R.id.txt_lan, items);
        ch1.setAdapter(adapter);*/

        ch1.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                String selectedItem = ((TextView) view).getText().toString();
                if (selectedItems.contains(selectedItem)) {
                    selectedItems.remove(selectedItem);
                } else {
                    selectedItems.add(selectedItem);

                }

                SharedPreferences.Editor editor = preferences.edit();
                Gson gson = new Gson();
                itemsString = gson.toJson(selectedItems);
                Log.d("valueFromPreferences", itemsString.toString());
                editor.putString(FirebaseAuth.getInstance().getCurrentUser().getUid(), itemsString);
                Log.d("user", FirebaseAuth.getInstance().getCurrentUser().getUid());
                editor.apply();


            }
        });

        //  Log.d("PEPITO", ingredientes.toString());

    }

    @Override
    protected void onStart() {
        super.onStart();

        //Seters Lunes
        ingredientes.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                String value = dataSnapshot.getValue(String.class);
                items = value.split(",");
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.semanarow, R.id.txt_lan, items);
                ch1.setAdapter(adapter);

            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }
}

【问题讨论】:

  • 您从日志语句中学到了什么?
  • Log.d("valueFromPreferences", itemsString.toString()); --- ["100g Fideos","1L Caldo de verduras","1 Manzana"]
  • Log.d("user", FirebaseAuth.getInstance().getCurrentUser().getUid());--- 正确的当前用户
  • Log.d("values", valueFromPreferences.toString());--- 空
  • Log.d("values2", values.toString());---- 空

标签: android android-studio arraylist checkbox sharedpreferences


【解决方案1】:

首先在共享首选项中保存复选框的状态,如下所示:

SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME,MODE_PRIVATE).edit();
//if it is checked set it true or false
editor.putString("state", "true");
editor.apply();

然后检索同一活动的onCreate中的数据

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String restoredText = prefs.getString("state", null);

在这里您将检查此字符串是否等于 true,您将复选框的状态更改为选中..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-12
    • 2011-12-17
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    相关资源
    最近更新 更多