Android / Java Попытка выяснить, куда поместить объявления переменных - PullRequest
1 голос
/ 26 июля 2011

Я новичок в разработке под Android, и до сих пор я в основном выяснял, как заставить учебный код работать в приложении, которое я создаю. Я изо всех сил пытаюсь понять, где объявлять переменные и почему я копирую и вставляю некоторые учебники, которые заканчиваются ошибками.

Например, я пытаюсь научиться использовать ViewFlipper. Из этого урока у меня есть проблемы с Eclipse, который говорит мне, что vf не является переменной, когда я использую ее внутри OnClick. Поэтому, когда я двигаю линию:

ViewFlipper vf = (ViewFlipper)findViewById(R.id.viewFlipper1);

чуть выше моего метода OnCreate, тогда он работает. Почему я вижу так много учебников с переменными, объявленными в OnCreate, и почему это не работает для меня? Где подходящее место, чтобы объявить их? Я понимаю основы инкапсуляции и наследования, поэтому OnCreate так же, как и любой другой метод, и любые объявленные там переменные изолированы от других методов? Как насчет моих кнопок, я должен объявить их внутри моего класса, но вне OnCreate?

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Почему я вижу так много учебников с переменными, объявленными в OnCreate, и почему это не работает для меня?

Объявление переменных внутриметод, или, снаружи, действительно сводится к тому, какого типа scope вы хотите связать с переменной.
Внутри метода вы должны быть осторожны, что вы объявляете переменную до того, какВы собираетесь использовать это.

Где подходящее место для их объявления?

Соответствие тому, где объявлять переменную, полностью зависит от того, гдевсе, что вы хотите использовать.Объявление переменной на уровне класса, когда вы собираетесь использовать ее только внутри метода, неразумно.И объявлять переменные в методах, когда многие другие методы в классе хотят получить к нему доступ, и вы в конечном итоге передаете переменные каждому методу - тоже неразумно.Итак, на данный момент вы можете просто рассмотреть:

  1. Объявление переменных в классе - когда многие методы в классе должны получить к нему доступ.
  2. Объявление переменной в методах - когда только метод имеетиспользуйте для переменной.

Я хотел бы добавить, что 1 и 2 являются не универсальными правилами, которые могут бытьприменяется вслепую - но чтобы начать, вы можете следовать им, пока не выясните более глубокие нюансы, связанные с областью видимости переменных, спецификацией доступа и временем жизни.

Я не говорю о спецификаторах доступа здесь, так какОни заслуживают очень подробного понимания, которое вы можете получить здесь .И я также не говорил о разнице переменных экземпляра и класса здесь, потому что вам лучше обратиться к официальному документу, например этот .

Я понимаю основы инкапсуляции и наследования, поэтому onCreate так же, как и любой другой метод, и любые объявленные там переменные изолированы от других методов?

Это верно.

Что касается моих кнопок, я должен объявить их внутри моего класса, но вне onCreate?

Компоненты пользовательского интерфейса в Android обычно требуются несколькими методами длядоступ.TextView, Button и т. Д. - как правило, имеют состояния, которые необходимо изменить в разное время, из разных методов - так что вам лучше объявить их на уровне класса.

Еще одна важная причина, почемуВы должны предпочесть объявление переменных пользовательского интерфейса на уровне класса - это то, что вы уменьшаете накладные расходы на создание инфраструктуры Android для каждого вызова метода.Пока ваш экземпляр Activity активен, платформа поддерживает компоненты / переменные пользовательского интерфейса.

0 голосов
/ 26 июля 2011

это потому, что вне метода onCreate переменные являются глобальными для вашего класса. Ака, любой метод в вашем классе может получить доступ к этим переменным. Когда вы объявляете переменные в onCreate, эти переменные доступны только в скобках метода oncreate. Вы должны объявить вашу переменную вне метода onCreate и инициализировать их в методе onCreate:

ViewFlipper vf;

onCreate(....)

vf = (ViewFlipper) findViewById(R.id.viewFlipper1);

затем установите свой onClickListener

0 голосов
/ 26 июля 2011

onCreate аналогичен любому другому методу, и к нему применяются все правила Java, касающиеся инкапсуляции и области видимости переменных.Объявите переменную ViewFlipper как член класса вне вашего метода onCreate.Но создайте его экземпляр в вашем методе onCreate, как сказано в учебнике.

Все в Android работает так же, как и в Java.Все правила программирования Java соблюдаются здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...