Обновить TextView после закрытия alerdDialog

171
16 августа 2018, 14:40

В каком направлении копать? Есть активити, при нажатии на кнопку вызывается alerdDialog в котором выходит список (массив) цифр, при выборе меняется переменная, но не обновляется textView элемент, после закрытия диалога (но переменная меняется). И меняет своё значение при повторном вызове диалога

public class HlamActivity extends AppCompatActivity {
TextView helpMyTextView;
Auxiliary auxiliary;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_hlam);
helpMyTextView = (TextView)findViewById(R.id.textView2);
button= (Button)findViewById(R.id.buttonHlam);
helpMyTextView.setText("Значение = "+MainActivity.Q_Q);

button.setOnClickListener(new View.OnClickListener() {
     @Override
 public void onClick(View view) {
    start();
 } });
}
public void start(){
    auxiliary.alerdDialogQ(this);
}

др. *.java

public class Auxiliary {
Context context;
public void alerdDialogQ(Context context){
    res = context.getResources();
    final String [] Q = {"10","20","30","40","50"};
    AlertDialog.Builder builder=new AlertDialog.Builder(context);
    builder.setTitle(res.getString(R.string.numberQ));
    builder.setItems(Q, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
      MainActivity.Q_Q = Integer.parseInt(Q[i]);
           //????
        }
    });
    builder.setCancelable(false);
    builder.create();
    builder.show();
}} 

Найденные варианты:

1) использовать класс Handler

2) Создать таймер, и обновлять класс каждые 200 мс

3) Перидовать данные через Integer

Answer 1

В вашем случае правильно будет использовать интерфейс и передавать через него сигнал в активность, где будут проходить все изменения.

например вот так:

public class Auxiliary {
Context context;
DialogCallback callback;
    interface DialogCallback {
        void dialogCallback(int data);
    }
    public void alerdDialogQ(Context context){
        callback = (DialogCallback) context;
        ...
            public void onClick(DialogInterface dialogInterface, int i) {
                callback.(Integer.parseInt(Q[i]));
            }
        ...
    }
}

А в активности прописать:

public class HlamActivity extends AppCompatActivity implements Auxiliary.DialogCallback {
@Override
void dialogCallback(int data){
    Q_Q = data;
    textView.setText(String.valueOf(data));
}

Статическую переменную MainActivity.Q_Q вашем случае использовать не рекомендуется.

READ ALSO
Наложение цвета на background-image

Наложение цвета на background-image

у меня есть header, как наложить цвет именно на картинку в фоне?

169
Стрелка при наведении

Стрелка при наведении

Здравствуйте? Каким методом реализуется подобное? При наведении должна появляться стрелка в виде треугольника как на скриншоте?

159
z-index, убрать блоки под родителя

z-index, убрать блоки под родителя

как убрать блоки линий за серый фон снизу, если этот фон для них родитель, а блоки с отрицательным margin? Пробовал z-index, не получаетсяТ

168
Вызов метода подменой контекста

Вызов метода подменой контекста

Если я хочу вызвать функцию из прототипа массивов, например forEach, для коллекции, допустим NodeList, то какой вариант лучше избрать?

142