Je voudrais savoir ce que la méthode setContentView()
de Activity.java appelle exactement.Code source Android, trace Java, classe abstraite
Here est le code source Android et le talon de code à la ligne 1646:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
}
Voici ma trace ...
À la ligne 642, nous savons qu'il est de type android.view.Window
private Window mWindow;
Mais Window.java est une classe abstraite. Et à la ligne 738, la méthode est abstraite aussi:
public abstract void setContentView(int layoutResID);
Où est le corps de la fonction réelle être mis en œuvre?
Retour au fichier Activity.java, à la ligne 3746, nous trouvons quelques initialisations de mWindow
:
mWindow = PolicyManager.makeNewWindow(this);
mWindow.setCallback(this);
...
Eh bien, à propos com.android.internal.policy.PolicyManager
« s makeNewWindow()
:
public static Window makeNewWindow(Context context) {
return sPolicy.makeNewWindow(context);
}
et
private static final IPolicy sPolicy;
Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME);
sPolicy = (IPolicy)policyClass.newInstance();
IPolicy.java est une interface, ce qui signifie pas d'implémentation du tout.
Ma trace ne peut pas aller plus loin. Pourriez-vous m'aider s'il vous plaît?
En particulier, je sais Activity.setContentView()
finira par appeler android.support.v4.app.Fragment.java
de Fragment.onInflate()
- ligne 920, Fragment.onAttach()
- ligne 928, Fragment.onCreate()
- ligne 953, Fragment.onCreateView()
- ligne 967, et Fragment.onViewCreated()
- ligne 991.
"En particulier, je sais que Activity.setContentView() appellera finalement android.support.v4.app.Fragment.java's Fragment.onInflate()" - non, il ne le fera pas. 'Activity' ne sait rien à propos de' android.support.v4.app.Fragment'. 'Activity' peut savoir quelque chose à propos de' android.app.Fragment'. 'android.support.v4.app.FragmentActivity' peut savoir quelque chose à propos de' android.support.v4.app.Fragment'. – CommonsWare
Oui @CommonsWare, vous avez raison. En fait, selon le code source, 'Fragment.onAttach()', 'Fragment.onCreate()', 'Fragment.onCreateView()' et 'Fragment.onViewCreated()' sont appelés dans 'FragmentActivity.onCreate()' > 'mFragments.dispatchCreate()'> 'FragmentManager.moveToState (Fragment.CREATED, false)'. Mais étonnamment, j'ai ajouté quelques 'System.out.println()' s avant et après 'setContentView()', et dans les méthodes 'Fragment'. Il semble que ces méthodes 'Fragment' sont appelées dans' setContentView() '. – midnite
duplication possible de [Certains Java aide avec la source Android s'il vous plaît?] (Http: // stackoverflow.com/questions/16764572/some-java-aide-à-la-android-source-s'il vous plaît) – StarPinkER