Изменение текста из другого вида деятельности
Как динамически изменять содержимое TextView с другой части экрана?
У меня есть класс TabActivity, который рисует RelativeLayout, который содержит TextView, за которым следует a с несколькими вкладками. Внутри каждой вкладки есть отдельное намерение. Из одного из вариантов вкладок я хотел бы изменить текст (через .setText) TextView из родительского TabActvity.
Возможно ли это?
Ответы
Ответ 1
Вы должны использовать компоненты архитектуры Android:
Вы можете создать ViewModel, содержащий LiveData вашего объекта данных (LiveData<String>
, если вы хотите изменить только текст).
Когда вы измените свой живой объект данных с одного Activity
или Fragment
, все остальные наблюдения за действиями и фрагментами для этого объекта живых данных будут уведомлены.
Официальный API doc имеет полный пример с описанием.
Ответ 2
Создайте общедоступный метод в вашей TabActivity, который устанавливает текст TextView, затем вызовите getParent()
из дочернего действия, отбросите его в свой класс TabActivity и вызовите этот открытый метод.
Ответ 3
Вы можете попробовать реализовать обработчик для родительской вкладки, которая выполняет задание. Передайте текст в объекте сообщения с каждой из ваших соответствующих вкладок. Чтобы быть в безопасности, внесите изменения внутри обработчика внутри блока runOnUI.
Ответ 4
В случае изменения текста из асинхронного файла вам необходимо реализовать интерфейс со слушателем. Пример:
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.
}
Эта структура поможет вам предотвратить исключение нулевого указателя.