Изменение текста из другого действия
Как динамически изменить содержимое TextView из другой части экрана?
У меня есть класс TabActivity, который рисует RelativeLayout, который содержит TextView, а затем с несколькими вкладками. Внутри каждой вкладки есть отдельное намерение. Из одного из намерений вкладки я хотел бы изменить текст (через.setText) TextView из родительского TabActvity.
Это возможно?
4 ответа
Вы должны использовать компоненты архитектуры Android:
Вы можете создать ViewModel, содержащую LiveData вашего объекта данных (LiveData<String>
в случае, если вы хотите изменить только текст).
Когда вы измените свой объект данных в реальном времени с одного Activity
или же Fragment
все другие Действия и Фрагменты, наблюдающие за этим объектом данных в реальном времени, будут уведомлены.
Сделайте публичный метод в вашем TabActivity, который устанавливает текст TextView, затем вызовите getParent()
из дочернего действия приведите его к вашему классу TabActivity, а затем вызовите этот открытый метод.
Вы можете попробовать реализовать обработчик для родительской вкладки, которая выполняет эту работу. Передайте текст в объект сообщения с каждой из ваших соответствующих вкладок. Для безопасности внесите изменения в обработчик внутри блока runOnUI.
В случае изменения текста из файла asynctask вам необходимо реализовать интерфейс со слушателем. Пример:
AsynctaskFile:
OnReadyListener onReadyListener;
public class ABCAsynctaskFile{
...
onReadyListener.onReady();
}
public interface OnReadyListener{
void onReady();
}
public void setOnReadyListener(OnReadyListener onReadyListener){
this.onReadyListener = onReadyListener;
}
ActivityFile:
public class ABC extends AppCompactActivity implements ABCAsynctaskFile.OnReadyListener{
..
ABCAsynctaskFile aBCAsynctaskFileObj = new ABCAsynctaskFile(context);
aBCAsynctaskFile.setOnReadyListener(ABC.this)
}
@Override
public void onReady(){
// Your wished changed in edit text.
}
Эта структура поможет вам предотвратить исключение нулевого указателя.