Comment findViewById travail?
package com.example.dell.helloworld;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void showToast(View view)
{
Toast t= new Toast(this);
LayoutInflater inflater=getLayoutInflater();
View v=inflater.inflate(R.layout.toast, (ViewGroup) findViewById(R.id.toastViewGroup));
t.setView(v);
t.show();
}
}
À partir de l'android developer site
findViewById
recherches pour enfant vues avec id.
Dans le code ci-dessus, qui est le parent de la vue, dont les enfants sont recherchés pour des id?
Vous devez vous connecter pour publier un commentaire.
La vue racine dans une Activité est déterminée par la
setContentView(int layoutId)
ousetContentView(View rootView)
.Dans votre cas, il est
Par conséquent, toute conversation que vous avez avec
findViewById
va rechercher l'id deactivity_main.xml
.Si elle est incapable de trouver l'id que vous avez spécifié, il retournera null.
Il est intéressant de mentionner que vous n'êtes pas à l'appel de cette méthode et c'est généralement la façon dont un Toast est faite.
findViewById
est a appelé activity_main parce que vous êtes en l'appelant à partir de l'Activité de la classe (commethis.findViewById
). Si vous voulez l'appeler sur le toast de mise en page, alors vous aurez besoin de fairev.findViewById
. Si, il fonctionne de la façon actuelle, alors j'imagine que vous avez dupliqué queR.id
valeur dans les deux fichiers XMLfindViewById
travail? Qui est la vue parent dont les enfants sont recherchés?Dans le cas d'une
Activity
,findViewById
commence la recherche à partir de l'affichage du contenu (défini avecsetContentView
) de l'activité qui est le point de vue de la hiérarchie gonflés à partir de la mise en page de ressources.View
gonflé deR.layout.toast
est défini comme l'enfant de la vue de contenu? si oui, alors pourquoi Il ne se présente pas, dès qu'il est gonflé?View
gonflé deR.layout.toast
est défini comme l'enfant de la racineView
de l'activité, pourquoi ne pas apparaître, dès qu'il est gonflé? J'ai essayé de réglage.setVisibility(View.VISIBLE)
sur le gonflés vue.R.id.toastViewGroup
). Il se pourrait qu'il ne sait pas comment faire pour calculer sa taille.dans le fichier XML quand on ajoute un élément, puis définissez les propriétés pour nous seuls
définir les valeurs de ces propriétés, maintenant, pour chaque élément, il y a une classe qui l'attire
à l'écran, cette classe possède les attributs avec le même nom des propriétés dans le fichier XML
maintenant, à l'aide d'algorithmes de lecture-écriture de fichiers de ces valeurs à partir du fichier XML sont transmises au fichier java (classe) de l'élément, puis la classe de tirages élément sur l'écran.
Avant de la classe de l'élément le dessine, il y a une super-classe de tous les éléments, le parent pour chacun d'eux, est appelé à Vue (tous les éléments de l'activité est appelée à vue) cette classe possède les propriétés de base de tous les éléments, et cette classe est l'une des propriétés dans le fichier XML sera transmis.
Méthode findViewById() renvoie un objet de type de Vue, cet objet contient les valeurs des propriétés, puis nous avons besoin de la lancer à l'élément spécifique, par exemple, TextView qui est une classe pour dessiner la vue texte de cette classe et l'ensemble des éléments " classes sont des sous-classes de la classe d'Affichage donc ce que nous faisons est de passer, que lorsque cette méthode retourne un objet de type de Vue, nous abattu à l'élément de classe
Comment il trouve les propriétés? il trouve les propriétés de l'élément à l'aide de l'id si la balise dans le fichier XML d'abord il recherche dans le fichier XML pour la balise qui contient le nom de l'élément, puis il regarde l'id si c'est l'id qui il veut
puis il la prend sinon, il recherche un autre tag (avec le même nom de l'élément).
Nous donner l'id par cette approche. il y a une classe est appelée R (ressources), cette classe a classes imbriquées (id, string, couleurs) ces classes ont des attributs de même type et de même tenir certaines valeurs, par exemple, l'id de classe, il a des attributs qui stocke chaque id de chaque élément dans le fichier XML, de sorte que lorsque nous voulons donner à la méthode findViewById() id-nous aller à cette classe et dites-lui d'entrer l'id de classe et de choisir l'id de l'élément que nous voulons.
ِِEt le processus va qu'il pénètre dans le fichier XML et recherchez l'élément qui a cet id et il faut les propriétés et les transmet à l'affichage de la classe de l'objet et lorsqu'il renvoie à l'objet que l'on abattu à l'élément de la classe que nous voulons dessiner
et de traiter avec elle.