web-dev-qa-db-fra.com

Android: findviewbyid: recherche vue par ID lorsque la vue n'est pas sur la même présentation invoquée par setContentView

J'ai une activité MyActivity qui s'étend de MapActivity. Dans le fichier .xml contenant la mise en page, je ne peux inclure que MapView

<com.google.Android.maps.MapView
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/trail_map_view"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:clickable="true"
    Android:apiKey="key"
/>

Cependant, je dois trouver une autre vue située dans un autre fichier .xml . Malheureusement, findViewById renvoie null . Comment puis-je obtenir la vue que je cherche?

Merci beaucoup!

39
Santiago

Merci de votre commentaire, je comprends ce que vous voulez dire mais je ne voulais pas vérifier les anciennes valeurs. Je voulais juste obtenir un pointeur sur cette vue.

En regardant le code de quelqu'un d'autre. Je viens de trouver une solution de contournement. Vous pouvez accéder à la racine d'une présentation à l'aide de LayoutInflater.

Le code est le suivant, où this est une activité:

final LayoutInflater factory = getLayoutInflater();

final View textEntryView = factory.inflate(R.layout.landmark_new_dialog, null);

landmarkEditNameView = (EditText) textEntryView.findViewById(R.id.landmark_name_dialog_edit);

Vous devez obtenir l'inflateur pour le contexte this, accéder à la vue racine par la méthode inflate et enfin appeler findViewById dans la vue racine de la présentation.

J'espère que c'est utile pour quelqu'un! Au revoir

70
Santiago

J'ai changé d'activité mais j'ai effectué . Voici mon code:

View layout = getLayoutInflater().inflate(R.layout.list_group,null);
        try {
            LinearLayout linearLayout = (LinearLayout) layout.findViewById(R.id.ldrawernav);
            linearLayout.setBackgroundColor(Color.parseColor("#ffffff"));
        }
        catch (Exception e) {

        }

    }
5
user5076776

essayer:

Activity parentActivity = this.getParent();
if (parentActivity != null)
{
    View landmarkEditNameView = (EditText) parentActivity.findViewById(R.id. landmark_name_dialog_edit);
}
4
richy

C'est impossible. Vous pouvez uniquement rechercher et accéder aux vues en cours d'exécution. Si vous voulez vérifier la valeur de ex. TextView utilisé dans l'activité previus vous devez enregistrer la valeur SharedPreferences, database, file ou passer par Intent.

0
skyman

Une autre façon de faire est:

// inflate the layout
View myLayout = LayoutInflater.from(this).inflate(R.layout.MY_LAYOUT,null);

// load the text view
TextView myView = (TextView) myLayout.findViewById(R.id.MY_VIEW);
0
JFreeman