2016-06-03 3 views
1

Я не понимаю, диалог и все работает, но как только я получаю значение из EditText и назначаю его val, запустите приложение, которое оно сработает в процессе onClick при успехе.Значение EditText в диалоговом окне

я получаю сообщение об ошибке: попытка вызвать виртуальный метод 'android.text.Editable android.widget.EditText.getText()' на нулевой ссылки на объект

public void createDialogBox() { 

    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(R.layout.custom_dialog) 
      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // On success 

        EditText text = (EditText) findViewById(R.id.shopping_list_recycler_view); 
        String val = text.getText().toString(); 

        adapter = new ShoppingListViewAdapter(test, MainShoppingListViewActivity.this); 
        recyclerView.setAdapter(adapter); 

        adapter.addTest(new Data(val, "Created by: Me")); 
       } 
      }) 
      .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
        // On failure 
        Toast.makeText(MainShoppingListViewActivity.this, "Failed", Toast.LENGTH_SHORT).show(); 
       } 
      }) 
      // Desired icon for the dialog box 
      .setIcon(android.R.drawable.ic_dialog_alert) 
      .show(); 
} 

Журналы

06-03 22:37:29.778 21364-21364/familyshopshare.com.familyshopshare E/AndroidRuntime: FATAL EXCEPTION: main 
Process: familyshopshare.com.familyshopshare, PID: 21364 
java.lang.ClassCastException: android.support.v7.widget.RecyclerView cannot be cast to android.widget.EditText 
at familyshopshare.com.familyshopshare.MainShoppingListViewActivity$3.onClick(MainShoppingListViewActivity.java:93) 
at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:157) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
+0

Пожалуйста, добавьте журналы аварий. –

+0

Это полный журнал ошибок. Я попытался очистить и перестроить проект. Кажется, я не понимаю, почему это не работает. Я делал это много раз раньше, немного случайный, если вы спросите меня –

ответ

0

Вам нужно, чтобы получить представление о диалоге с LayoutInflater, как это:

View rootView = layoutInflater.inflate(R.layout.dialog_layout, null); 

Тогда у ожно назвать

EditText text = (EditText) rootView.findViewById(R.id.shopping_list_recycler_view); 
1

Если вы хотите, чтобы получить точку внутри диалога, то вы должны раздуть макет, как это -

View rootView = inflater.inflate(R.layout.custom_dialog, null); 

Затем инициализировать свои взгляды -

final EditText text = (EditText)rootView.findViewById(R.id.shopping_list_recycler_view); 

и установить его как вид в диалоговом окне

builder.setView(rootView); 

Тогда вы можете получить доступ к EditText внутри OnClick(), как это -

public void onClick(DialogInterface dialog, int which) { 
     // On success 
     String val = text.getText().toString(); 

} 

от аварии, то ясно, что вы неправильно типажей вид идентификаторов. Вы неправильно указали shopping_list_recycler_view как EditText. Проверьте свой xml и используйте правильный идентификатор вида.

+0

'(EditText) rootView.findViewById (R.id.shopping_list_recycler_view);' выглядит подозрительно, нет? Прочтите ошибку снова –

+0

@ Dan только что опубликовал его журналы. Обновлен мой ответ. –

+0

Да, R.id.shopping_list_recycler_view не является правильным, предполагалось, что оно должно быть в списке ShoppinglistName, чтобы добавить, что случайно я только что исправил его. Это не проблема. Однако ваше решение разрешило это решение. Большое вам спасибо :) –

0

Пожалуйста, проверьте свой XML для правильного идентификатора, который является вашим EditText.

Ваша ошибка очень ясна.

RecyclerView cannot be cast to android.widget.EditText 

Вы также ищете в деятельности с findViewById, как у вас, так что вам нужно, чтобы получить его с точки зрения диалога.

// Inflate and set the layout for the dialog 
// Pass null as the parent view because its going in the dialog layout 
// 
View dialogView = getLayoutInflate().inflate(R.layout.custom_dialog, null); 

// Get your Views 
final EditText editText = dialogView.findViewById(R.id.someEditText); 

// Build and show the dialog 
builder.setView(dialogView) 
     ... 
     .create().show(); 
+0

Идентификатор был опечаткой, android auto выбрал его, он был разрешен с правильным ID. Спасибо, что указали это :). Я вижу, что вы сделали, и понимаете это. Еще раз спасибо :) –

Смежные вопросы