2015-12-19 258 views
0

我正在製作一個應用程序,其中有兩個開關按鈕,一個用於twitter登錄,另一個用於twitter登錄。關閉應用程序後保持開關按鈕的狀態

我已經通過在相同的主題(firstsecond

,但沒有其他職位去幫助我,這就是爲什麼發佈的新問題。

所以基本上有一個開關按鈕來登錄和註銷。它工作得很好。如果我關閉應用程序並再次返回到應用程序,那麼也可以正常工作,即會話保持完好,但狀態按鈕被設置爲false,即不活動。

我跟着其他的答案,如果我實現,我得到一個錯誤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的東西,一切工作正常,除了該開關按鈕的狀態。

如果您需要更多信息,請讓我知道。 感謝

+0

代碼出錯了?我仍然不明白。 – Blundell

+0

我有兩個開關按鈕,一個用於Facebook登錄,另一個用於twitter登錄。我也有兩個框架佈局(每個框架佈局,我展示基本信息並允許用戶推特和分享/喜歡)。我的問題是,如果關閉應用程序並重新啓動它,我可以返回會話,但切換按鈕處於「關閉」階段(如果我沒有實現'SharedPreferences'事件,並且實現SharedPreference之後的錯誤是(1/2) – driftking9987

+0

我認爲這是因爲它調用'onCheckChanged'函數(因爲它正在改變相同的狀態,如果我刪除'SharedPreferences'首選項,它工作正常(2/2) – driftking9987

回答

0

您可以使用下面的代碼:

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(); 
     } 
    }); 
+0

謝謝,我必須做一些改變,但是我得到了它的工作,很少有問題,對'sharedPreferences'你使用小's',我們需要'S'(我想知道這是否是故意的我應該在什麼地方宣佈它?)。然後在第二行中使用了你沒有在任何地方聲明的'preferecnces'。這個答案指出了我的正確方向。非常感謝。 – driftking9987

+0

只是一個方面..你不需要做一個if其他只是preferences.putBoolean(「isChecked」,isChecked);將工作。 –

0

馬哈茂德的代碼不能正常工作,需要一些改變。這是一個工作版本。它基本上保存在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();; 
      } 
     } 
    }); 
相關問題