2

Я запутался об использовании устаревшего метода, я использую класс, расширяющие из ListFragment класса, и я реализация onAttach() метода, этот метод имеет два " версии»Устаревшего метод запутанный

@Override 
public void onAttach(Context context) { 
     super.onAttach(context); 
    //This method requires api level 23 or higher 
} 

и

@Override 
public void onAttach(Activity activity) { 
     super.onAttach(activity); 
    //This method was deprecated in API level 23. 
} 

Я читал об устаревших методах, и я понимаю, что он будет удален в будущих версиях, то я решил использовать onAttach (контекст контекста), но теперь я запутался по двум причинам:

1 Если я хочу сделать приложение с minsdkversion 8 и tasksdkversion 24, какой метод я должен реализовать?

2-я делает приложение с minsdkversion 8, и я использовал onAttach (контекст Context) метод, и он работает в эмуляторе с апи 8, и я попробовал в смартфоне с апи 16 и он тоже работает, Почему это работает? возможно, он должен работать только в версии 23 и выше ...?

ответ

2

Если вы используете Support Library ListFragment, то вы можете использовать onAttach(Context) на всех устройствах API 4+. Если вы используете framework ListFragment, то метод onAttach(Context)будет сбой на устройствах pre-API 23, поскольку он не существует.

Я подозреваю, что после того, как вы подтвердили, что onAttach(Context) работает на более старых уровнях API, вы уже используете Фрагмент поддержки.

+0

Вы правы, я пользуюсь библиотекой поддержки. –

1

1 Если я хочу сделать приложение с minsdkversion 8 и targetdkversion 24, какой метод я должен реализовать?

Всегда используйте не устаревший метод. Программисты Android позаботились о том, чтобы они были обратно совместимы.

2-I'm делает приложение с minsdkversion 8 и я использовал метод onAttach (контекст Context), и он работает в эмуляторе с апи 8, и я попробовал в смартфоне с апи 16 и он тоже работает, Почему это работает? возможно, он должен работать только в версии 23 и выше ...?

Наиболее очевидная причина является то, вероятно, обратной совместимостью и что Context является более широким, чем лицом Activity. Это связано с тем, что Activity реализует интерфейс Context, поэтому везде, где требуется Context, вы можете вместо этого предоставить Activity. Вероятно, это причина, по которой использование версии с Context работает на более низких API.

Что касается метода устаревания, то причиной этого может быть то, что в один прекрасный день Фрагменты могут не ограничиваться привязкой к действиям (только дикая догадка), а метод, принимающий аргумент Контекста, является первым шагом к что.

+1

Фрагменты уже не привязаны к деятельности - см [FragmentController] (HTTPS: //developer.android.com/reference/android/app/FragmentController.html) и [FragmentHostCallback] (https://developer.android.com/reference/android/app/FragmentHostCallback.html). В настоящее время, однако, действия являются единственными, которые реализуют его в Android API. – ianhanniballake

+0

Спасибо @ianhanniballake за разъяснение. Я этого не знал, у меня точно была догадка, так что кажется :) – Vucko

0

Я знаю, что это не ответ на ваш вопрос, но я прекратить использование onAttach(), чтобы получить ссылку на вызывающую операцию ...

Я заметил, что я держал ссылку на операцию, но я использую его в очень мало места ...

Итак, я начал называть getActivity(), когда мне нужна ссылка на вызывающую деятельность ... Таким образом, вам не нужно переопределить onAttach()

Смежные вопросы