3 votes

Comment puis-je obtenir une référence sur le TextView à partir de la disposition XML dans AlertDialog ?

J'ai un curieux problème d'obtention de référence sur TextView, SeekBar et autres widgets. Mon AlertDialog ressemble à ceci :

public class LineDialog extends AlertDialog {
private static SeekBar seekBar1, seekBar2, seekBar3;
private static TextView textView1, textview2, textView3;

protected LineDialog(final Context context, final DrawView drawView) {
    super(context);

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View dialogLayout = inflater.inflate(R.layout.line_dialog, null);

    setView(dialogLayout);
    setTitle("Line properties");
    textView1 = (TextView) findViewById(R.id.textView1); // TODO Code crash here :(
    setButton("Ok", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            seekBar1 = (SeekBar) findViewById(R.id.seek1);
            // some other code...
        }
    });
}

Quand je veux obtenir une référence dans la ligne où se trouve

textView1 = (TextView) findViewById(R.id.textView1);

Logcat m'envoie une erreur

requestFeature() must be called before adding content

Mais lorsque j'obtiens une référence dans la méthode onClick() dans LineDiealog(AlertDialog) tout fonctionne bien. Malheureusement, c'est trop tard, car j'ai besoin de cette référence avant que LineDialog.show() soit appelé...

3voto

M_Mendoza Points 31

Vous l'aviez presque dans votre code original. Vous avez enregistré la vue retournée par LayoutInflater et c'est donc celui que vous devez utiliser lorsque vous appelez findViewById() donc ça doit être dialogLayout.findViewById(...) . J'avais moi-même le même problème et cela fonctionne comme un charme maintenant.

1voto

V.J. Points 2850

Ici est un exemple de boîte de dialogue personnalisée AlertDialogbox et Comment mettre en œuvre une vue AlertDialog personnalisée ? vous pouvez voir comment ajouter la vue à l'alertdialogbox.

1voto

Rilcon42 Points 2428

Vous devez soit référencer votre textView par LinearLayout, soit par Android:id dans le fichier xml.

Exemple de LinearLayout :

LinearLayout mainLinear = new LinearLayout(this);
mainLinear.addView(textBox);

pour ajouter du texte à la boîte :

textBox.addText("This is the text to add to the text box");

référence xml (vous devez créer la zone de texte dans xml first !!!!):

TextView text1=(TextView) findViewById(R.id.NAME);
text1.setText("Hello please pick an option below");

La partie NAME doit être remplacée par le nom Android:id dans le fichier .xml.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X