Сохранение состояния кнопки переключения через общие настройки, когда приложение закрыто

В моей деятельности у меня есть кнопка переключения. Я хотел сохранить состояние кнопки переключения, когда приложение закрывается из фона.

Состояние переключателя сохраняется, когда приложение находится в фоновом режиме, но возвращается к состоянию по умолчанию (ВЫКЛ.), когда приложение удаляется из фона.

Я попытался воспроизвести программу из здесь. Но я все еще не могу сохранить состояние кнопки переключения.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_settings);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    switch1 = (Switch) findViewById(R.id.switch1);

    SharedPreferences sharedPrefs = getSharedPreferences("com.example.xyz", MODE_PRIVATE);
    switch1.setChecked(sharedPrefs.getBoolean("NameOfThingToSave", true));


    switch1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (switch1.isChecked()) {

                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                editor.putBoolean("NameOfThingToSave", true);
                editor.apply();
                switch1.setChecked(true);

                AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
                // Setting Dialog Title
                alertDialog.setTitle("Download all the Product's PDF.");
                // Setting Icon to Dialog
                alertDialog.setIcon(R.drawable.pdf_alert_dialog);

                // Setting Positive "Yes" Button
                alertDialog.setPositiveButton("CANCEL",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                switch1.setChecked(false);
                                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                                editor.putBoolean("NameOfThingToSave", false);
                                editor.apply();

                                dialog.dismiss();
                            }
                        });
                // Setting Negative "NO" Button
                alertDialog.setNegativeButton("DOWNLOAD ALL ",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {

                                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                                editor.putBoolean("NameOfThingToSave", true);
                                editor.apply();


                                AlertDialog.Builder alertDialog1 = new AlertDialog.Builder(context);
                                // Setting Dialog Title
                                alertDialog1.setTitle("Free storage Available:" + megAvailable1 + " MB");
                                alertDialog1.setMessage("File size to Download: POJO MB");
                                // Setting Icon to Dialog
                                alertDialog1.setIcon(R.drawable.pdf_alert_dialog);

                                alertDialog1.setPositiveButton("CANCEL",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog1, int which) {
                                                switch1.setChecked(false);
                                                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                                                editor.putBoolean("NameOfThingToSave", false);
                                                editor.apply();

                                                dialog1.dismiss();
                                            }
                                        });
                                // Setting Negative "NO" Button
                                alertDialog1.setNegativeButton("DOWNLOAD  ",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog1, int which) {

                                                getFeedDownload();

                                                SharedPreferences.Editor editor = getSharedPreferences("com.example.xyz", MODE_PRIVATE).edit();
                                                editor.putBoolean("NameOfThingToSave", true);
                                                editor.apply();

                                            }

                                        });
                                alertDialog1.show();
                            }
                        });

                // Showing Alert Message
                alertDialog.show();
            } else {
            }
        }
    });

Можете ли вы помочь мне, сказав, где я иду не так?


person Suhail Parvez    schedule 04.08.2016    source источник


Ответы (3)


Возможно, попробуйте editor.commit() вместо editor.apply(). Обратитесь к этому сообщению о разнице между ними.

person Alexi V.    schedule 04.08.2016
comment
Я пытался использовать editor.commit(), но все равно состояние не сохраняется, что касается этого, когда я снова открываю приложение, переключатель возвращается в состояние по умолчанию (ВЫКЛ). - person Suhail Parvez; 04.08.2016
comment
@Suhail Parvez ты сказал перед тем, как убить приложение, переключатель находится в выключенном режиме. когда ты снова открываешь его, он переходит на onmode.am, я прав - person Vishwa; 04.08.2016
comment
@Vishwa Это наоборот, я держу его в режиме «Вкл.», И когда я закрываю приложение из фона и возвращаюсь снова. Он будет находиться в выключенном состоянии. - person Suhail Parvez; 04.08.2016

Ошибка, которую я сделал, заключалась в том, что в моем onResume переключатель был ВЫКЛЮЧЕН. Следовательно, каждый раз, когда я перезапускал приложение, переключатель выключался независимо от общего предпочтения.

Я добавил проверку, чтобы убедиться, что PDF-файл загружен в папку «Загрузки». Если они были, то я просто поворачиваю переключатель в положение ON, а если нет, то в положение OFF.

 @Override
public void onResume() {
    super.onResume();

    Call<List<Products>> listCall = mManager.getProductsService().getAllProducts();
    //execte for the call back (asynchronous).

    // Now we start to execute the call
    listCall.enqueue(new Callback<List<Products>>() {
        @Override
        public void onResponse(Response<List<Products>> response, Retrofit retrofit) {
            if (response.isSuccess()) {
                List<Products> productsList = response.body();

                for (int i = 0; i < productsList.size(); i++) {
                    Products products = productsList.get(i);
                    String links = (products.getFilePath());
                    String name = products.getFileID();
                    String link = links.replaceAll("\\\\", "");
                    Log.i("linkkkkkSettings", link);


                    File applictionFile = new File(Environment.getExternalStoragePublicDirectory(
                            Environment.DIRECTORY_DOWNLOADS) + "/" + name + ".pdf");
                    if (applictionFile != null && applictionFile.exists()) {

                        switch1.setChecked(bundle.getBoolean("ToggleButtonState", true));
                    } else {

                        switch1.setChecked(bundle.getBoolean("ToggleButtonState", false));
                    }


                }
            }
        }

        @Override
        public void onFailure(Throwable t) {

        }
    });


}
person Suhail Parvez    schedule 05.08.2016

Я предпочитаю, чтобы Сохранить состояние переключалось как логическое на общие настройки. затем в onCreate() и onResume() после загрузки общие префы делают это..

    daynight = findViewById(R.id.switchDnevni);
    daynight.setChecked(switchChecked);

Удачного кодирования,

person Nenad Štrbić    schedule 18.04.2020