Я пытаюсь создать серию диалоговых меню, которые вы можете пройти в 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)
Ничего Я пробовал работать, поэтому любая помощь будет оценена! Спасибо!
Эй, это сработало! Огромное спасибо!! Вы знаете, почему это работает? В чем разница между отдельным созданием представления и тем, что у меня было выше, которое появилось прямо из обучающих программ Android Dialog? – notchopra
Вы искали текстовое представление в иерархии представления активности (или фрагмента). Но диалог имеет свой собственный вид иерархии (даже отдельное окно для показа), поэтому вы должны искать его в последнем. –
Получил это. Еще раз спасибо! – notchopra