Je ne comprends pas complètement les fonctions de LayoutInflater, bien que je l'ai utilisé dans mes projets. Pour moi c'est juste un moyen de trouver la vue quand je ne peux pas appeler la méthode findViewById. Mais parfois, cela ne fonctionne pas comme je l'espère.Qu'est-ce qui est équivalent à findViewById en utilisant LayoutInflater dans Android?
J'ai cette mise en page très simple (main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/layout">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, MyActivity"
android:id="@+id/txt"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Change text"
android:id="@+id/btn"/>
</LinearLayout>
Ce que je veux est très simple - il suffit de changer le texte à l'intérieur TextView lorsque vous appuyez sur le bouton. Tout fonctionne bien comme ça
public class MyActivity extends Activity implements View.OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.btn);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
TextView txt = (TextView) findViewById(R.id.txt);
double random = Math.random();
txt.setText(String.valueOf(random));
}
}
Mais je veux comprendre ce qui serait l'équivalent en utilisant LayoutInflater? J'ai essayé, mais sans succès, TextView n'a pas changé sa valeur
@Override
public void onClick(View view) {
LayoutInflater inflater = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View main = inflater.inflate(R.layout.main, null);
TextView txt = (TextView) main.findViewById(R.id.txt);
double random = Math.random();
txt.setText(String.valueOf(random));
}
Mais quand je vois que le débogage chaque variable avec la valeur droite remplit. Je veux dire variable txt contient réellement TextView dont la valeur est "Hello World, MyActivity", et après la méthode setText il contient un certain nombre aléatoire, mais je ne pouvais pas voir ces changements sur l'interface utilisateur. C'est le problème principal que j'ai rencontré avec LayoutInflater dans mes projets - pour une raison quelconque, je ne peux pas mettre à jour les vues gonflées. Pourquoi?
Merci. Oui, je sais que j'ai tort, c'est pourquoi je pose cette question. Alors, est-il impossible de mettre à jour la vue avec LayoutInflater sans utiliser la méthode setContentView? –
@VitaliiKorsakov Oui, c'est impossible. Le 'LayoutInflater' va créer de nouvelles vues avec la méthode' inflate', donc vous n'avez pas de "connections" (ou référence si vous préférez) aux anciennes vues qui sont déjà présentes dans la disposition de 'Activity'. – Luksprog