0

Ich versuche, eine Reihe von Dialogmenüs zu erstellen, die Sie in Android durchlaufen können. (Im Grunde eine USSD-Interaktion in Android verspotten). Jedes Dialogfeld ist ein Textansichtsmenü mit nummerierten Auswahlmöglichkeiten, eine EditText-Ansicht, in der der Benutzer seine Nummer eingeben kann, und zwei Schaltflächen, Abbrechen und Senden (um zum nächsten Schritt zu gelangen).Text dynamisch in benutzerdefiniertem Layout aktualisieren Dialog, NPE - Android

Während ich meinen ersten Hauptmenüdialog anzeigen kann, wie ich möchte, habe ich eine Menge Probleme, meinen Text dynamisch zu aktualisieren. Wenn ich versuche, den TextView aufzurufen, um seinen Text festzulegen, gibt er mir weiterhin eine NPE, und ich bin mir nicht sicher, warum!

Hier ist der Anfangscode in meiner Tätigkeit ist (der Dialog erscheint sofort beim Starten)

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(); 

} 

Und hier ist das Layout für die generische Dialogansicht (jetzt Hauptmenü aufgerufen, aber umbenannt werden generisch, wenn ich das zur Arbeit bringen kann). Die Textview enthält keinen Text gerade jetzt, da ich es zu dynamisch setzen will:

<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" /> 

Als ich das laufen, bekomme ich diesen Fehler:

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) 

Nichts Ich habe versucht, funktioniert, also würde jede Hilfe geschätzt werden! Vielen Dank!

Antwort

2

Try this:

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

Hey, das funktioniert! Ich danke dir sehr!! Weißt du zufällig, warum das funktioniert? Was ist der Unterschied zwischen dem separaten Erstellen einer Ansicht und dem, was ich oben hatte, was direkt aus den Android Dialog-Tutorials kam? – notchopra

+0

Sie haben nach einer Textansicht innerhalb der Ansichtshierarchie für Aktivitäten (oder Fragmente) gesucht. Der Dialog hat jedoch seine eigene Hierarchieansicht (sogar ein separates Fenster, das angezeigt werden soll), also sollten Sie innerhalb des Letzteren suchen. –

+0

Bekam es. Danke noch einmal! – notchopra