Пара проблем дизайна с этим, но в целом это кажется разумным.
Я бы отказался от статического экземпляра в классе ChildActivity
. Зачем? Ну, подумай об отношениях, которые ты моделируешь. A TabActivity
имеет ChildActivity
. Это составление учебника, и оно будет достигнуто путем добавления поля ChildActivity в класс TabActivity, например:
public class TabActivity {
private ChildActivity child;
//remember to initialize child in onCreate
//then, call methods using child.changeUI();, for example
}
Это лучше, потому что A) теперь у меня может быть несколько экземпляров TabActivity и ChildActivity, которые не будут мешать друг другу (раньше это была просто статическая переменная, поэтому можно было использовать только одну ChildActivity), и B) ChildActivity инкапсулируется внутри класса TabActivity ... раньше это было открытое поле, означающее, что все могут использовать и изменять его (может быть нежелательно; часто это может привести к некоторым странным ошибкам во время выполнения, а также к грязному, связанному коду) - мы изменили его на приватное поле, потому что на самом деле мы не хотим, чтобы другие классы обращались к нему неожиданным образом.
Единственное, к чему вам может понадобиться доступ от ChildActivity - это родитель (TabActivity). Для этого добавьте следующие методы и поле в класс ChildActivity и вызовите метод registerParent () после создания ChildActivity:
public class ChildActivity ...{
private TabActivity parent;
public void registerParent(TabActivity newParent){
if (newParent != null){
parent = newParent;
}
}
}
Итак, если вам нужен доступ к родительскому элементу TabActivity
от дочернего элемента, просто вызовите parent.someMethod ();
Было бы также разумно обращаться к таким полям, как parent
и child
через геттеры и сеттеры; это может сэкономить вам время в долгосрочной перспективе.