Я все еще новичок в программировании для Android, поэтому этот вопрос довольно простой. Я вижу множество примеров кода в Интернете, где компоненты пользовательского интерфейса, такие как TextView
, инициализируются и доступны в методе onCreate()
Activity.
Когда я использую Android Studio для создания нового проекта — FirstApp
— с настройками по умолчанию, пустой Activity под названием MainActivity
, включающей в себя activity_main
и fragment_main
, я могу немедленно скомпилировать это в APK, развернуть на своем устройстве и получить экран с заголовком «FirstApp» и TextView в верхнем левом углу, показывающим «Hello world!».
Если я дам TextView
идентификатор textview1
и создам переменную-член TextView myTextView;
, то я смогу сослаться на нее в методе onCreate()
действия, например так (конечно, без ошибок компилятора):
@Override
protected void onCreate (Bundle savedInstanceState)
{
super.onCreate (savedInstanceState);
setContentView (R.layout.activity_main);
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
if (savedInstanceState == null)
{
getSupportFragmentManager().beginTransaction().add (R.id.container,new PlaceholderFragment()).commit();
}
}
Однако, если я скомпилирую и запущу APK, это приведет к ошибке «К сожалению, FirstApp остановлен». сообщение.
Раньше я обходил эту проблему, перемещая код запуска, который обращается к компонентам пользовательского интерфейса, в метод onStart()
действия, например так:
@Override
protected void onStart()
{
super.onStart();
myTextView = (TextView) findViewById (R.id.textview1);
myTextView.setText ("Hello tablet!");
}
В результате будет работать APK с одним TextView в левом верхнем углу, показывающим «Привет, планшет!» - мои простые вопросы двояки...
- Если проект использует фрагменты, то должен ли я полностью ожидать, что компоненты пользовательского интерфейса не могут быть доступны в методе
onCreate()
действия, как это происходит с большим количеством образцов кода в Интернете, вероятно, потому, что они еще не были созданы? - Допустимо ли для меня получать доступ к компонентам пользовательского интерфейса в методе
onStart()
Activity (который действительно работает) или мне следует делать что-то еще? Ранее я также использовал методonCreateView
фрагмента, но является ли лучшим местом для доступа к компонентам пользовательского интерфейса внутри фрагмента на самом деле в методеonCreate()
фрагмента, который я еще не пробовал?
Я также отмечаю, что метод onCreate()
фрагмента по умолчанию, который Android Studio создает для вас, когда вы создаете новый проект, не имеет предоставленной заглушки... но onCreateView
имеет, и документация жизненного цикла подразумевает (во всяком случае для меня), что этот может быть лучшим местом для таких вещей.
Любое руководство по этому поводу приветствуется.
myTextView
настраивается где-то еще, т.е.TextView myTextView;
? - person TMH   schedule 14.02.2014onCreate()
). Проблема в том, что вы пытаетесь получить доступ к представлению фрагмента, которого следует избегать, и вместо этого позволяете фрагменту обрабатывать это самостоятельно. - person user   schedule 14.02.2014TextView myTextView;
включен как переменная-член. Подразумевает ли ваш ответ, что вы считаете, что этот компонент пользовательского интерфейса должен быть полностью доступен в методеonCreate()
самого Activity? - person Hippogriff   schedule 14.02.2014