1

В моем приложении я разрешаю пользователю выбирать имя для отображения. Он должен отображаться как: Здравствуйте, usertext!Обновить текст сразу после изменения настроек пользователя

Я могу успешно обновить настройки. Я использовал PreferenceActivity. Я тоже могу изменить значение. Но чтобы изменить текст в выбранном текстовом представлении, я должен перезапустить приложение.

Как обновить текстовое представление сразу после того, как пользователи обновили значение в настройках?

+1

пожалуйста показать код, который вы используете до сих пор – BR89

+1

Вы можете использовать 'Preference.OnPreferenceChangeListener' –

+0

@ BR89 мой код очень похоже на код LBJ33. – Vishwa

ответ

1
Preference.OnPreferenceChangeListener changeListener = new Preference.OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     // Code goes here    
     return true; 
    } 
}; 

EditTextPreference pref = (EditTextPreference)findPreference(getString(R.string.pref1)); 
pref1.setOnPreferenceChangeListener(changeListener); 

EditTextPreference pref2 = (EditTextPreference)findPreference(getString(R.string.pref2)); 
pref2.setOnPreferenceChangeListener(changeListener); 
+0

спасибо, я проверю this.but, я думаю, что это сделает трюк – Vishwa

1

Для этого вы можете использовать SharedPreferences, не забудьте использовать .apply после установки значений. Вот пример (Не забудьте изменить значение в соответствии с вашим EditText, кнопки, классы, т.д.):

активностью Два (там, где они новое значение и сохранить его):

public class settings extends MainActivity { 
private Button mButton; 
private EditText mEditText; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.settings); 
    mButton = (Button) findViewById(R.id.submit); 
    mEditText = (EditText) findViewById(R.id.editTxtUsername); 

    mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
      SharedPreferences.Editor editor = pref.edit(); 
      if (mEditText.getText().length() > 0) { 
       editor.putString("username", mEditText.getText().toString()); 
       editor.apply(); 

      } else Toast.makeText(getApplicationContext(), "Please enter a valid username.", Toast.LENGTH_LONG).show(); 
     } 
    }); 
    } 
} 

Один активности (Где вы хотите просмотреть имя пользователя):

public class MainActivity extends AppCompatActivity { 

private TextView mTxtUsername; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mTxtUsername = (TextView) findViewById(R.id.txtUsername); 
    SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); 
    String username = pref.getString("username", ""); 

    mTxtUsername.setText(username); 
    } 
} 

Это должно работать, и сохранить значение в следующий раз они открывают приложение, как хорошо! Дайте мне знать, если у вас есть какие-либо проблемы с кодом, я просто взбитыми его быстро

+0

спасибо. Точно, что я был. Но проблема в том, что у меня есть значение в том, что textview не обновляется, пока я не закрою и не открою приложение .i нужно найти способ обновить textview сразу после обновления значения в settings.thanks для help @ LBJ33 – Vishwa

+0

LBJ33 это сработало! спасибо Хотя я нашел, что помещаю эту строку до того, как строка setContentView() в методе onCreate() тоже работает, только если я указал значение по умолчанию внутри моего XML-файла предпочтений. PreferenceManager.setDefaultValues ​​(это, R.xml.preferences, false); Спасибо за ответ. Работает так, как я ожидал – Vishwa

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