2017-01-01 2 views
0

Я понимаю, что лучший способ сохранить значения - использовать SharedPreferences, например.Использование SharedPreference для сохранения сведений о пользователе

SharedPreferences Savesettings = getSharedPreferences("settingFile", MODE_PRIVATE); 
     SharedPreferences.Editor example = Savesettings.edit(); 
     example.putString("Name", name) 
       .putInt("Age", age) 
       .putInt("Score", score) 
     example.apply(); 

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

SharedPreferences Preferences= PreferenceManager.getDefaultSharedPreferences(this); 
     SharedPreferences.OnSharedPreferenceChangeListener Example = 
       new SharedPreferences.OnSharedPreferenceChangeListener() { 
        public void onSharedPreferenceChanged(SharedPreferences preferance, String key) { 

         Name = name;//only an example not the main focus 
         Age = age; 
         Score = score; 
         enableBTN = false; //disables button 
         Name.setEnabled(false); //disables the edit text from further editing 
} 
       }; 
     Preferences.registerOnSharedPreferenceChangeListener(Example); 

Есть ли способ сделать это, оба метода, похоже, не работают для меня.

+0

https://developer.android.com/guide/topics/data/data-storage.html или https://developer.android.com/guide/topics /resources/runtime-changes.html – Blundell

ответ

1

Необходимо сохранить его с помощью кнопки OnClickListener. Таким образом, каждый раз, когда нажимается кнопка, вам гарантируется сохранение состояния кнопки. button представляет собой ссылку на объект в Button вид

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle bundle) { 
     Button button = (Button)findViewById("this_button_view_id"); 
     EditText editText = (EditText)findViewById("this_edit_text_id"); 
     SharedPreferences Savesettings = getSharedPreferences("settingFile", MODE_PRIVATE); 

     // If the Savesettings shared preferences above contains the "isButtonDisabled" key 
     // It means the user clicked and disabled the button before 
     // So we use that state instead 
     // If it does does not contain that key 
     // We set it to true so that the button is not disabled 
     // Same for the edit text 
     button.setEnabled(Savesettings.contains("isButtonDisabled") ? Savesettings.getBoolean("isButtonDisabled") : true); 
     editText.setEnabled(Savesettings.contains("isEditTextDisabled") ? Savesettings.getBoolean("isEditTextDisabled") : true); 

     button.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // disable the edit text 
       editText.setEnabled(false); 

       // disable the button 
       button.setEnabled(false); 

       SharedPreferences.Editor example = Savesettings.edit(); 

       // Save the button state to the shared preferences retrieved above 
       example.putBoolean("isButtonDisabled", true); 

       // Save the edit text state to the shared preferences retrieved above 
       example.putBoolean("isEditTextDisabled", true); 
       example.apply(); 

      } 
     }); 
    } 
} 
+0

Но что, если я хочу установить другой цвет фона или отключить edittext? –

+0

Когда кнопка нажата? Я имею в виду, что вы можете делать любые типы логик, которые вы хотите в 'OnClickListener' – Dummy

+0

. Повторное создание активности в нажатие кнопки не имеет смысла правильно, почему вы хотите сделать это в любом случае? вы можете закрыть действие или запустить новый, что имеет больше смысла. Сохранение для общих предпочтений связано между 'Savesettings.edit();' и 'example.apply();' не помещайте какой-либо другой код в этот – Dummy

Смежные вопросы