Я пытаюсь получить доступ к методу, который изменяет текстовое поле в пользовательском интерфейсе объекта Activity из другого файла Java. В Game.java (обычный файл Java в фоновом режиме) У меня есть некоторые статические переменные, которые со временем меняются. Я хочу, чтобы изменения в этих переменных отражались в реальном пользовательском интерфейсе. Следовательно, я пытаюсь получить доступ к методу «changeName» в DisplayMessageActivity.java, который будет отражать соответствующие изменения (display_message_activity.xml).FindViewById не может ссылаться на статический контекст
Это метод DisplayMessageActivity.java, что я пытаюсь позвонить из Game.java
public void changeName() {
TextView text = (TextView) findViewById(R.id.petname);
text.setText("" + Game.name);
}
Чтобы позвонить DisplayMessageActivity.changeName()
из Game.java, я должен изменить его на статический метод.
public static void changeName() {
TextView text = (TextView) findViewById(R.id.petname);
text.setText("" + Game.name);
}
Но делать это дает мне ошибку «не статический метод не может быть доступен из статического контекста» для «findViewByID». Я даже попытался сделать экземпляр DisplayMessageActivity.java в Game.java для доступа к методу «changeName», не делая его статическим. Однако это порождает исключение nullPointerException в TextView text = (TextView) findViewById(R.id.petname);
Как решить эту проблему?
Необходимы ли статические переменные? Не могли бы вы поместить их в POJO и инициализировать их в конструкторе? – CubeJockey
Да, нужны статические переменные. Я не хочу создавать экземпляры Game.java, потому что мне нужно получить доступ к тем же переменным из разных видов деятельности. – Dhruv
Вы можете использовать шаблон дизайна Singleton (http://www.javaworld.com/article/2073352/core- java/simple-singleton.html), это гарантирует, что во всех действиях есть только один экземпляр класса. – CubeJockey