3

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.

+0

"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

+0

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

+0

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

Répondre

0

Vous pouvez trouver ce sources ici

mise en œuvre de la politique: source

mise en œuvre de la fenêtre: source

Questions connexes