具有时间延迟的切换按钮共享首选项

时间:2019-02-19 14:11:31

标签: android

我正在实现一个拨动开关,该开关应在特定的时间延迟后关闭。但是,当我关闭应用程序时,它会丢失拨动开关的当前状态。因此,我想为此使用共享首选项。但是,在下面的代码中,我的共享的首选项存储了开关的当前状态,但是在指定的时间延迟后并没有关闭开关。

我尝试实现共享首选项来存储切换开关的状态。但是,在关闭应用程序并再次打开它之后,它会记住当前状态,但在指定的时间延迟后不会关闭。

公共类MainActivity扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ToggleButton toggleButton = findViewById(R.id.tb1);
    final Handler handler = new Handler();

    SharedPreferences sharedPrefs = getSharedPreferences("com.example.vishal.togglebutton", MODE_PRIVATE);
    toggleButton.setChecked(sharedPrefs.getBoolean("toggleButton", true));

    toggleButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(toggleButton.isChecked()) {
                final SharedPreferences.Editor editor = getSharedPreferences("com.example.vishal.togglebutton", MODE_PRIVATE).edit();
                editor.putBoolean("toggleButton", true);
                editor.apply();

                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        toggleButton.setChecked(false);
                    }
                }, 10000);
            }
            else {
                Toast.makeText(MainActivity.this, "Uncheck", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

}

1 个答案:

答案 0 :(得分:0)

尝试这个概念,完成后取消线程。

    @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ToggleButton toggleButton = findViewById(R.id.tb1);
        Handler handler = new Handler();

        SharedPreferences sharedPrefs =               getSharedPreferences("com.example.vishal.togglebutton", MODE_PRIVATE);

         toggleButton.setOnClickListener(new View.OnClickListener() {
         @Override
          public void onClick(View view) {
                if(toggleButton.isChecked()) {
                    SharedPreferences.Editor editor =     getSharedPreferences("com.example.vishal.togglebutton",     MODE_PRIVATE).edit();
                     editor.putBoolean("toggleButton", false);
                     editor.apply();
                 }
                  else {
                    SharedPreferences.Editor editor = getSharedPreferences("com.example.vishal.togglebutton", MODE_PRIVATE).edit();
                      editor.putBoolean("toggleButton", true);
                      editor.apply();
                 }
           }
        });

         handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                                      toggleButton.setChecked(sharedPrefs.getBoolean("toggleButton", false));
                   }
                }, 10000);
          }

      }