Обновите TextView после отключения alertdialog

#java #android #textview

#java #Android #textview

Вопрос:

У меня есть действие (называемое DiscoverActivity), которое имеет следующее расстояние TextViews :

введите описание изображения здесь

Как только пользователи нажимают на расстояние, AlertDialog открывается следующее:

введите описание изображения здесь

Теперь, у меня было такое, что, как только пользователи нажимают на Done кнопку, она отклонит AlertDialog и обновит TextView on DiscoverActivity .

Как я могу его обновить?

Прямо сейчас, когда я нажимаю Готово и отклоняю, оно показывает то же значение, пока я не переключусь между действиями и не вернусь.

Мой код для кнопки Готово:

 Btn_Done.setOnClickListener( view -> {
    SharedPreferences.Editor editor = context.getSharedPreferences( AppConstants.PREFS_NAME, MODE_PRIVATE ).edit();
    editor.putInt( AppConstants.PREF_RADIUS, seekbar.getProgress() );
    editor.apply();
    dialog.dismiss();
} );
  

И это то, что я вызываю в моем onCreate:

 SharedPreferences dist_settings = getSharedPreferences( AppConstants.PREFS_NAME, MODE_PRIVATE );
nearMeRadius = dist_settings.getInt( AppConstants.PREF_RADIUS, 300 );
TextView tv_NearRadius = findViewById( R.id.tv_NearRadius );
tv_NearRadius.setText( getString( R.string.ActivityDiscover_NearMeRadius, nearMeRadius ) );
tv_NearRadius.setOnClickListener( v -> {
    PopUps popUps = new PopUps();
    popUps.popDistanceDialog( DiscoverActivity.this );
} );
  

Комментарии:

1. onCreate() вызывается во время создания действия. По этой причине значение не обновляется, поскольку нет кода для его обновления после закрытия диалогового окна.

Ответ №1:

Любой метод, включая общие предварительные настройки, будет работать только один раз, пока действие не будет обновлено, но когда вы закрываете диалоговое окно, действие не обновляется.

Итак, у вас есть 2 варианта

  • Найдите способ обновить действие после нажатия кнопки «Готово» в диалоговом окне предупреждения, чтобы закрыть dilaog.
  • Или вы можете просто оставить все прежним, но когда пользователь нажимает кнопку «Готово», это изменяет текст действия.

Для того, чтобы выполнить смысл второго пункта, это намного проще, вы можете просто сделать:

 Btn_Done.setOnClickListener( view -> {
    SharedPreferences.Editor editor = context.getSharedPreferences( AppConstants.PREFS_NAME, MODE_PRIVATE ).edit();
    editor.putInt( AppConstants.PREF_RADIUS, seekbar.getProgress() );
    editor.apply();
    TextView txtView = (TextView) ((Activity)context).findViewById(R.id.text); // this points to the textview in the activity you want to change
        txtView.setText("Hello");
    dialog.dismiss();
} );
  

Ответ №2:

Определите интерфейс,

 interface SomeInfy(){
void updateText(String text);
}
  

Внедрите интерфейс для вашего DiscoveryActivity и переопределите updateText()

 @Override
public void updateText(String someText){
tv_NearRadius.setText(someText);
}
  

Теперь,
Просто передайте интерфейс из вашего DiscoveryActivity в класс PopUps

 tv_NearRadius.setOnClickListener( v -> {
    PopUps popUps = new PopUps();
    popUps.popDistanceDialog( DiscoverActivity.this, DiscoverActivity.this);
} );


class PopUps{

public void popDistanceDialog( Context context, SomeInfy infy ){


// whatever btnDone operation...
 Btn_Done.setOnClickListener( view -> {
    SharedPreferences.Editor editor = context.getSharedPreferences( AppConstants.PREFS_NAME, MODE_PRIVATE ).edit();
    editor.putInt( AppConstants.PREF_RADIUS, seekbar.getProgress() );
    editor.apply();
    dialog.dismiss();
    
    //
    infy.updateText("whatever");
    
    
} );



}
  

Ответ №3:

Или более жестокий, но тоже может быть удобным. В вашем диалоговом окне есть метод getActivity().

Непосредственно перед отключением и после сохранения ваших предпочтений используйте метод getActivity() из вашего диалогового окна. Примените его к вашей активности, а затем обновите текст редактирования.

Как я уже сказал, это необработанное программирование, но может соответствовать размеру и структуре вашего проекта.

Получайте удовольствие.