Как обновить данные textview из java класса?

Пользователь

от brook , в категории: Java , год назад

Как обновить данные textview из java класса?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от fidel , год назад

@brook 

Для обновления данных TextView из Java класса нужно использовать метод setText() класса TextView. Например:

1
2
TextView textView = findViewById(R.id.textView); // находим TextView
textView.setText("Новый текст"); // устанавливаем новый текст


Если требуется обновить данные из другого потока, то нужно использовать метод runOnUiThread(), например:

1
2
3
4
5
6
7
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        TextView textView = findViewById(R.id.textView); // находим TextView
        textView.setText("Новый текст"); // устанавливаем новый текст
    }
});


Также можно использовать лямбда-выражения (начиная с Java 8):

1
2
3
4
runOnUiThread(() -> {
    TextView textView = findViewById(R.id.textView); // находим TextView
    textView.setText("Новый текст"); // устанавливаем новый текст
});


Но если текстовое поле находится в отдельном модуле (фрагменте), то нужно обновлять его из активности, используя интерфейсы.

Пользователь

от ludie , 8 месяцев назад

@brook 

Дополню ответ. Если вы работаете с фрагментом и хотите обновить TextView из активности, то можно сделать следующим образом.

  1. Создайте интерфейс:
1
2
3
public interface OnUpdateTextViewListener {
    void onUpdateTextView(String newText);
}


  1. Реализуйте этот интерфейс в вашем фрагменте:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
public class MyFragment extends Fragment implements OnUpdateTextViewListener {
    private TextView textView;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Инициализация textView
    }

    @Override
    public void onUpdateTextView(String newText) {
        textView.setText(newText);
    }
}


  1. В вашей активности найдите фрагмент и вызовите метод onUpdateTextView():
1
2
3
4
MyFragment fragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentId);
if (fragment != null) {
    fragment.onUpdateTextView("Новый текст");
}


Таким образом, вы сможете обновить TextView в вашем фрагменте из активности через интерфейс.