Я хотел бы узнать, что именно Activity.javasetContentView()
метод звонит/делает.Исходный код Android, Java trace, abstract class
Here является исходным кодом Android и код заглушки на линии 1646:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
}
Вот мой след ...
В строке 642, мы знаем, что это типа android.view.Window
private Window mWindow;
Но Window.java - это абстрактный класс. А в строке 738, метод является абстрактным также:
public abstract void setContentView(int layoutResID);
Где осуществляться фактическая функция тела?
Назад к файлу Activity.java, в строке 3746, мы находим некоторые инициализации из mWindow
:
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
...
Ну, про com.android.internal.policy.PolicyManager
«s makeNewWindow()
:
public static Window makeNewWindow(Context context) {
return sPolicy.makeNewWindow(context);
}
и
private static final IPolicy sPolicy;
Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);
sPolicy = (IPolicy)policyClass.newInstance();
IPolicy.java - это интерфейс, что означает отсутствие реализации вообще.
Мой след не может быть продолжен. Не могли бы вы помочь мне?
В частности, я знаю Activity.setContentView()
в конечном счете называют android.support.v4.app.Fragment.java
«s Fragment.onInflate()
- линия 920, Fragment.onAttach()
- линия 928, Fragment.onCreate()
- линия 953, Fragment.onCreateView()
- линия 967, и Fragment.onViewCreated()
- линия 991.
«В частности, я знаю, что Activity.setContentView() в конечном итоге вызовет android.support.v4.app.Fragment.java Fragment.onInflate()» - нет, это не так. 'Активность' ничего не знает о' android.support.v4.app.Fragment'. 'Активность' может что-то знать о' android.app.Fragment'. 'android.support.v4.app.FragmentActivity' может что-то знать о' android.support.v4.app.Fragment'. – CommonsWare
Да @CommonsWare, вы правы. Фактически, согласно исходному коду, 'Fragment.onAttach()', 'Fragment.onCreate()', 'Fragment.onCreateView()' и 'Fragment.onViewCreated()' вызывается в 'FragmentActivity.onCreate()' > 'mFragments.dispatchCreate()'> 'FragmentManager.moveToState (Fragment.CREATED, false)'. Но удивительно, что я добавил некоторые 'System.out.println()' s до и после 'setContentView()' и в этих методах 'Fragment'. Похоже, что методы 'Fragment' вызываются внутри' setContentView() '. – midnite
Возможный дубликат [Некоторая поддержка Java с источником Android, пожалуйста?] (Http: // stackoverflow.ком/вопросы/16764572/некоторые-ява-помогает-с-андроида-исток-пожалуйста) – StarPinkER