Форум программистов, компьютерный форум CyberForum.ru

Перегрузка OnCreate - Android

Восстановить пароль Регистрация
 
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 01:09     Перегрузка OnCreate #1
Гуру ООП, помогите исправить "конфликт"

Написал свой класс-предок для активити(MyActivity), где в onCreate добавил несколько дополнительных полей для работы с XML и с обработкой ошибки. От него наследую мои "рабочие" активити.

MyActivity наследуется от FragmentActivity
Java
1
2
3
4
    public void onCreate(Bundle savedInstanceState, String err_id, int ContextView_id) {
       super.onCreate(savedInstanceState);
       // дальше мои "доработки"
    }
В рабочем активити делаю так:
Java
1
2
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState, "Error_3924829", R.layout.frm_main);
(так удобнее)

В результате все работает, но в Студии строка public void onCreate(Bundle savedInstanceState) { светится ошибкой!
Среди предложений можно перед public void onCreate(Bundle savedInstanceState) { поставить @SuppressLint("MissingSuperCall")
тогда красный гаснет, но это... подозрительно что-ли... Не знаю как оно поведет себя в разных версиях SDK.

Кто знает, можно ли убрать ошибку еще на уровне предка?
Что означает/делает @SuppressLint("MissingSuperCall")?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lumber
81 / 81 / 30
Регистрация: 02.12.2015
Сообщений: 210
12.09.2016, 01:27     Перегрузка OnCreate #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Правильно, onCreate(Bundle) обязан вызвать super.onCreate(Bundle).
А он вызывает какой-то левый
onCreate(Bundle, String, int)
поэтому предупреждение

нафига вообще было перегружать onCreate()? лучше сделать свой метод со своим именем и туда разместить "доработки". и вызывать его без "super". (super и сейчас писать не обязательно - т.к. этот метод не переопределяется, а перегружается).

Совпадение имени только сбивает с толку. Фактически этот метод к оригинальному onCreate никакого отношения не имеет.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 01:34  [ТС]     Перегрузка OnCreate #3
Цитата Сообщение от Lumber Посмотреть сообщение
Совпадение имени только сбивает с толку
как раз в имени дело... оно привычное, его тяжело "потерять"... Но Вы наверное правы... попробую сделать некое init(,,) в котором буду вызывать предок с параметрами...

может все-таки можно стандартное перекрыть? ведь РАБОТАЕТ! просто РЕДАКТОР предупреждает об ошибке, но компилятор этой ошибки не замечает...
Lumber
81 / 81 / 30
Регистрация: 02.12.2015
Сообщений: 210
12.09.2016, 01:45     Перегрузка OnCreate #4
можно в MyActivity сделать абстрактные геттеры для параметров "Error_3924829" и R.layout.frm_main
и тогда в наследниках их нужно будет обязательно реализовать и соответственно эти значения не потеряются.

а init() вызывать из onCreate(Bundle) в MyActivity.
а onCreate в наследниках реализовывать стандартным образом.

Тогда невозможно будет забыть вызвать init() и невозможно будет забыть предоставить значения для него.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 02:28  [ТС]     Перегрузка OnCreate #5
Цитата Сообщение от Lumber Посмотреть сообщение
Тогда невозможно будет забыть вызвать init()
Сделал проще!
в предке перед public void onCreate(Bundle savedInstanceState) { поставил @Deprecated - это ЗАЧЕРКИВАЕТ все мои "стандартные" onCreate
сделал protected void _init(Bundle savedInstanceState, String err_title, int ContextView_id){
который "якрко" виден в списке благодаря "_" и в котором реализую всю мою старую начинку onCreate
OlegJV
 Аватар для OlegJV
99 / 99 / 29
Регистрация: 13.03.2016
Сообщений: 452
12.09.2016, 03:36     Перегрузка OnCreate #6
Вообще-то @Deprecated обозначает, что когда-нибудь это перестанет работать. Или я не прав?
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 04:25  [ТС]     Перегрузка OnCreate #7
Цитата Сообщение от OlegJV Посмотреть сообщение
Вообще-то @Deprecated обозначает, что когда-нибудь это перестанет работать. Или я не прав?
Так оно и есть! Поэтому система ПРЕДУПРЕЖДАЕТ программиста наглядно зачеркивая эту функцию когда я ее использую! В том числе и в боковом списке методов! Тяжело ошибиться и начать переопределять этот метод и проще вспомнить что вместо onCreate( надо переопределить _init(
OlegJV
 Аватар для OlegJV
99 / 99 / 29
Регистрация: 13.03.2016
Сообщений: 452
12.09.2016, 04:30     Перегрузка OnCreate #8
Так а зачем писать то, что потом не будет работать? Абстрактный init имхо лучше...
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 05:24  [ТС]     Перегрузка OnCreate #9
Цитата Сообщение от OlegJV Посмотреть сообщение
Так а зачем писать то, что потом не будет работать? Абстрактный init имхо лучше...
Ты не прочитал пост выше??? Попробуй сам приписать ЛЮБОМУ методу @Deprecated и посмотри как поведет себя СТУДИЯ! На производительность это не влияет! А я и так использую init! просто есть старые активити в нескольких проектах(один myActitity.java использую во всех проектах), которые надо перебрать и исправить - так оно куда удобнее!
OlegJV
 Аватар для OlegJV
99 / 99 / 29
Регистрация: 13.03.2016
Сообщений: 452
12.09.2016, 05:32     Перегрузка OnCreate #10
Извиняюсь, не сразу понял смысл. Но все равно способ, мягко говоря, сомнительный по моему мнению. Он-то рабочий. Но сомнительный.
P.S: Мозг уже не соображает, я тут полночи бился с неработающим датчиком освещенности. Только что выяснил - в используемом телефоне нет этого датчика )))))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.09.2016, 06:14     Перегрузка OnCreate
Еще ссылки по теме:

Android Один объект класса в onCreate и onClick
Android NullPointer в OnCreate
Сразу после нажатия Power вызывается OnCreate. Почему? Android
Android Ошибка VKSdk.initialize(Context) must be call from Application#onCreate()
Подскажите - программа вылетает в OnCreate Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
12.09.2016, 06:14  [ТС]     Перегрузка OnCreate #11

Не по теме:

Цитата Сообщение от OlegJV Посмотреть сообщение
я тут полночи бился
аналогично! я сегодня поисправлял все конфликты которые БЕСИЛИ уже несколько месяцев в нескольких проектах и добавил еще несколько функций в собственную ORM


попробую еще раз! есть КУЧА активити, в которых используется МОЙ предок для активити. У всех много кода в onCreate. Надо ВСЕХ переписать. Благодаря @Deprecated в предке у onCreate я СРАЗУ вижу какое активити надо переписать/перебрать (стоит его открыть) - студия явно показывает ошибку в списке методов и в коде!
Yandex
Объявления
12.09.2016, 06:14     Перегрузка OnCreate
Ответ Создать тему
Опции темы

Текущее время: 03:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru