0

Я пытаюсь создать серию диалоговых меню, которые вы можете пройти в Android. (В основном издеваются над взаимодействием USSD в Android). Каждое диалоговое окно представляет собой текстовое меню нумерованных вариантов, представление EditText для пользователя, чтобы ввести их выбор номера, и две кнопки: «Отмена» и «Отправить» (для перехода к следующему шагу).Динамическое обновление текста в пользовательском макете Диалог, NPE - Android

Хотя я могу открыть свое первое диалоговое окно главного меню, чтобы отобразить его, как я бы хотел, у меня возникли проблемы с динамическим обновлением моего диалогового текста. Когда я пытаюсь вызвать TextView, чтобы установить его текст, он продолжает давать мне NPE, и я не уверен, почему!

Вот исходный код в моей деятельности (диалог появляется сразу же после запуска)

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

} 

А вот макет для стандартного вида диалога (так называемого главным меню прямо сейчас, но будет переименован быть если я могу заставить это работать). TextView не содержит какой-либо текст прямо сейчас, так как я хочу, чтобы динамически вставить:

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

Когда я запускаю это, я получаю эту ошибку:

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) 

Ничего Я пробовал работать, поэтому любая помощь будет оценена! Спасибо!

ответ

2

Попробуйте это:

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

Эй, это сработало! Огромное спасибо!! Вы знаете, почему это работает? В чем разница между отдельным созданием представления и тем, что у меня было выше, которое появилось прямо из обучающих программ Android Dialog? – notchopra

+0

Вы искали текстовое представление в иерархии представления активности (или фрагмента). Но диалог имеет свой собственный вид иерархии (даже отдельное окно для показа), поэтому вы должны искать его в последнем. –

+0

Получил это. Еще раз спасибо! – notchopra