2013-04-10 2 views
0

Я пытаюсь получить возвращаемое значение из диалога и продолжать получать NPE. У меня есть Activity, у которого есть кнопка на экране. Когда кнопка нажата, появляется модальная с несколькими полями для заполнения. Когда я пытаюсь вернуть информацию к основной деятельности, мой NPE взрывается. Вот код:Исключение Null Pointer в диалоге для Android

public class FilterActivity extends Activity { 
    final Context context = this; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_filter); 

     Button addFilter = (Button) findViewById(R.id.addFilter); 
     addFilter.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View view) { 

       final EditText et = (EditText) findViewById(R.id.filterName);    
       LayoutInflater inflater = LayoutInflater.from(context); 
       View dialog_layout = inflater.inflate(
         R.layout.dialog_create_filter, null); 
       AlertDialog.Builder db = new AlertDialog.Builder(
         FilterActivity.this); 
       db.setView(dialog_layout); 

       db.setTitle("Create Filter"); 
       db.setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface d, int which) {  
           et.getText().toString(); 
          } 
         }); 
       db.show(); 
      } 
     }); 
     } 
    } 

EditText (et) по-прежнему имеет значение null, когда я пытаюсь извлечь из него значение. Что я делаю не так? Благодарю.

+0

показать выход LogCat! –

+0

Пожалуйста, разместите XML своего диалога. –

+0

У вас проверен идентификатор, который вы указали для edittext, доступен в макете activity_filter. – AAnkit

ответ

1

вы должны добавить db.findViewById(R.id.filterName);, как показано ниже

final EditText et = (EditText) db.findViewById(R.id.filterName); 

InstEd из

final EditText et = (EditText) findViewById(R.id.filterName); 

полный код:

   LayoutInflater inflater = LayoutInflater.from(context); 
       View dialog_layout = inflater.inflate(
         R.layout.dialog_create_filter, null); 
       AlertDialog.Builder db = new AlertDialog.Builder(
         FilterActivity.this); 

       db.setView(dialog_layout); 
       final EditText et = (EditText) db.findViewById(R.id.filterName); 

       db.setTitle("Create Filter"); 
       db.setPositiveButton("OK", 
         new DialogInterface.OnClickListener() { 

          @Override 
          public void onClick(DialogInterface d, int which) {  
           et.getText().toString(); 
          } 
         }); 
       db.show(); 
+0

На самом деле нет метода findViewById, прикрепленного к Builder, но я могу создать диалог и использовать findViewById для получения моего EditText. Отличная добыча. Благодарю. – jhamm

0

Где R.id.filterName находится?

Расположен ли он в dialog_create_filter?

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

Также см здесь: Android “Best Practice” returning values from a dialog

Надеется, что это помогает, Ярон

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