0

J'essaie de créer une série de menus de dialogue que vous pouvez parcourir dans Android. (Fondamentalement se moquant d'une interaction USSD dans Android). Chaque boîte de dialogue est un menu texte de choix numérotés, une vue EditText permettant à l'utilisateur d'entrer son choix de numéro, et deux boutons, Annuler et Envoyer (pour passer à l'étape suivante).Mise à jour dynamique du texte dans une mise en page personnalisée Dialog, NPE - Android

Bien que je puisse afficher ma première boîte de dialogue de menu principal comme je le souhaite, j'ai beaucoup de mal à mettre à jour dynamiquement mon texte de dialogue. Lorsque j'essaie d'appeler le TextView pour définir son texte, il continue à me donner un NPE, et je ne sais pas pourquoi !!

Voici le code initial dans mon activité (la boîte de dialogue apparaît immédiatement lors du démarrage)

TextView txtContent; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main_menu); 
} 

protected void onStart() { 
    super.onStart(); 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    // Get the layout inflater 
    LayoutInflater inflater = this.getLayoutInflater(); 

    // Inflate and set the layout for the dialog 
    // Pass null as the parent view because its going in the dialog layout 
    builder.setView(inflater.inflate(R.layout.main_menu_dialog, null)) 
      // Add action buttons 
      .setPositiveButton(R.string.send, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // Send number to next dialog 
        FirstTimeUse(); 
       } 
      }) 
      .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int id) { 
        // End session 
       } 
      }); 
    AlertDialog dialog = builder.create(); 
    TextView txtContent = (TextView)findViewById(R.id.main_menu_options); 
    txtContent.setText(R.string.MainMenuText); 
    dialog.show(); 

} 

Et est ici la mise en page pour la vue de dialogue générique (appelé menu principal en ce moment, mais renommé être générique si je peux obtenir cela au travail). Le TextView ne contient pas de texte en ce moment, puisque je veux qu'il soit dynamiquement mis en:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content"> 
<TextView 
    android:id="@+id/main_menu_options" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="16dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="4dp" /> 
<EditText 
    android:id="@+id/choice" 
    android:inputType="textShortMessage" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="4dp" 
    android:layout_marginLeft="4dp" 
    android:layout_marginRight="4dp" 
    android:layout_marginBottom="16dp" /> 

Quand je cours, je reçois cette erreur:

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(int)' on a null object reference 
                at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2411) 
                at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474) 

Rien J'ai essayé travaille, donc toute aide serait appréciée! Je vous remercie!

Répondre

2

Essayez ceci:

View dialogView = inflater.inflate(R.layout.main_menu_dialog, null); 
builder.setView(dialogView) 
... 
TextView txtContent = (TextView) dialogView.findViewById(R.id.main_menu_options); 
txtContent.setText(R.string.MainMenuText); 
+0

Hé, ça a fonctionné! Merci beaucoup!! Savez-vous pourquoi cela fonctionne? Quelle est la différence entre créer séparément une vue et ce que j'avais ci-dessus, qui vient directement des tutoriels Android Dialog? – notchopra

+0

Vous recherchiez une vue de texte dans la hiérarchie de vue d'activité (ou fragment). Mais la boîte de dialogue a sa propre vue hiérarchique (même une fenêtre distincte à afficher), vous devriez donc la rechercher dans cette dernière. –

+0

J'ai compris. Merci encore! – notchopra