簡體   English   中英

關閉應用程序后保持開關按鈕的狀態

[英]Keep the state of switch button after closing the app

我正在制作一個應用程序,其中有兩個切換按鈕,一個用於Twitter登錄,另一個用於Twitter登錄。

我瀏覽了相同主題的其他帖子( 第一第二

但是沒有任何幫助,這就是為什么發布新問題。

所以基本上是有一個切換按鈕來登錄和注銷。 工作正常。 如果我關閉該應用程序並再次返回該應用程序,那也可以正常工作,即會話保持不變,但狀態按鈕設置為false,即未激活。

我遵循了其他答案,並且如果實現了該答案,則會收到Caused by: java.lang.IllegalArgumentException: Callback must not be null.原因Caused by: java.lang.IllegalArgumentException: Callback must not be null.的錯誤Caused by: java.lang.IllegalArgumentException: Callback must not be null. (用於Twitter登錄)。

我將發布一些代碼,以解釋這種情況。

tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView,
                                         boolean isChecked) {

                if(isChecked){
                    SharedPreferences.Editor editor = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE).edit();
                    editor.putBoolean("service_status", tSwitch.isChecked());
                    editor.commit();
                    loginButton.performClick();
                }else{
                    Twitter.getInstance();
                    Twitter.logOut();
                    twitter_layout.setVisibility(View.GONE);
                    Toast.makeText(getApplicationContext(), "Logged out from Twitter", Toast.LENGTH_SHORT).show();
                }

            }
        });

 SharedPreferences prefs = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE);
    boolean tState = prefs.getBoolean("service_status", false);

    if(tState){
        //Do your work for service is selected on
        Toast.makeText(getApplicationContext(), "Inside the sharedPref", Toast.LENGTH_SHORT).show();
        tSwitch.setChecked(true);
    } else {
        //Code for service off
    }

如果我刪除了sharedPref東西,那么除了該切換按鈕的狀態之外,其他所有東西都工作正常。

如果您需要更多信息,請告訴我。 謝謝

您可以使用以下代碼:

sharedPreferences = getSharedPreferences("com.example.anubhaw.socialtwitter", MODE_PRIVATE);
    preferences = sharedPreferences.edit();
    tSwitch.setChecked(sharedPreferences.getBoolean("isChecked",false));
    tSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                preferences.putBoolean("isChecked",true);
            }else {
                preferences.putBoolean("isChecked",false);
            }
            preferences.commit();
        }
    });

Mahmoud編寫的代碼無效,需要進行一些更改。 這是一個工作版本。 它基本上將切換保存在SharedPreferences中。

private Switch mySwitch;


 // Switch
    mySwitch = (Switch) findViewById(R.id.mySwitch);

    boolean value = true; // default value if no value was found

    final SharedPreferences sharedPreferences = getSharedPreferences("isChecked", 0);

    value = sharedPreferences.getBoolean("isChecked", value); // retrieve the value of your key
    mySwitch.setChecked(value);

    mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                sharedPreferences.edit().putBoolean("isChecked", true).apply();
            }else {
                sharedPreferences.edit().putBoolean("isChecked", false).apply();;
            }
        }
    });

暫無
暫無

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

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