Сохранение состояния кнопки с общими настройками работает, но имя кнопки меняется, когда я покидаю приложение - PullRequest
0 голосов
/ 02 мая 2020

Я сохраняю состояние моей кнопки в общем предпочтении, и, похоже, оно работает. Я использую кнопку, чтобы включить службу. если я включаю сервис и покидаю приложение, я могу снова нажать кнопку, чтобы выключить его, что хорошо. единственное, что, когда я включаю службу, текст в кнопке должен измениться на «остановка службы», и это происходит, но когда я выхожу из приложения, она снова переключается на «запуск службы», но состояние сохраняется. вот где я реализую это


  SharedPreferences prefs =  Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE);
  final String check_state = prefs.getString( "state", "default");
  holder.startsCar.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(check_state.equals("false")){
                            holder.startsCar.setText("Stop Car");
                            Intent i = new Intent(Home.this.getActivity(), MQTTService.class);
                            ContextCompat.startForegroundService(Home.this.getActivity(), i);
                            for (int j = 0; j < adapter.getItemCount(); j++) {
                                if (adapter1.getItem(j).isSelected(true)) {
                                     name = ((TextView) holder.itemView.findViewById(R.id.make)).getText().toString();
                                    Toast.makeText(getActivity(), "Data Inserted....." + name, Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                }
                            }
                            SharedPreferences.Editor editor = Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE).edit();
                            editor.putString("state", "true");
                            editor.apply();
                            adapter.notifyDataSetChanged();

                            //Toast.makeText(Home.this.getContext(), "Service Started", Toast.LENGTH_SHORT).show();
                        }else{
                            holder.startsCar.setText("Start Car");
                            Intent i = new Intent(Home.this.getActivity(), MQTTService.class);
                            getActivity().stopService(i);
                            Toast.makeText(Home.this.getContext(), "Service Stoped", Toast.LENGTH_SHORT).show();
                            SharedPreferences.Editor editor =  Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE).edit();
                            editor.putString("state", "false");
                            editor.apply();
                            adapter.notifyDataSetChanged();
                        }
                    }
                });

Любая причина, почему это происходит?

1 Ответ

0 голосов
/ 02 мая 2020

Используйте этот код:

SharedPreferences prefs =  Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE);
  final String check_state = prefs.getString( "state", "default");

   if(!check_state.equals("false") {
        holder.startsCar.setText("Stop Car"); 
   }else { 
        holder.startsCar.setText("Start Car"); 
   }

  holder.startsCar.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(check_state.equals("false")){
                            holder.startsCar.setText("Stop Car");
                            Intent i = new Intent(Home.this.getActivity(), MQTTService.class);
                            ContextCompat.startForegroundService(Home.this.getActivity(), i);
                            for (int j = 0; j < adapter.getItemCount(); j++) {
                                if (adapter1.getItem(j).isSelected(true)) {
                                     name = ((TextView) holder.itemView.findViewById(R.id.make)).getText().toString();
                                    Toast.makeText(getActivity(), "Data Inserted....." + name, Toast.LENGTH_SHORT).show();
                                } else {
                                    Toast.makeText(getActivity(), "Error", Toast.LENGTH_LONG).show();
                                }
                            }
                            SharedPreferences.Editor editor = Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE).edit();
                            editor.putString("state", "true");
                            editor.apply();
                            adapter.notifyDataSetChanged();

                            //Toast.makeText(Home.this.getContext(), "Service Started", Toast.LENGTH_SHORT).show();
                        }else{
                            holder.startsCar.setText("Start Car");
                            Intent i = new Intent(Home.this.getActivity(), MQTTService.class);
                            getActivity().stopService(i);
                            Toast.makeText(Home.this.getContext(), "Service Stoped", Toast.LENGTH_SHORT).show();
                            SharedPreferences.Editor editor =  Home.this.getActivity().getSharedPreferences("check", MODE_PRIVATE).edit();
                            editor.putString("state", "false");
                            editor.apply();
                            adapter.notifyDataSetChanged();
                        }
                    }
                });

Обратите внимание, что я устанавливаю состояние текста StartCar, используя префы в начале

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...