2010-03-12 3 views
1

Я пытаюсь получить значение EditText в диалоговом окне. A строка «*» 'ed в следующем коде, safeNameEditText имеет значение NULL; я предполагаю, потому что «findVeiwById» выполняет поиск в контексте «AlertDialog.OnClickListener»; Как я могу получить/изменить контекст этого вызова «findViewById»?Изменение контекста Android для findViewById для супер из встроенного класса

protected Dialog onCreateDialog(int id) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 

    switch(id){ 
    case DIALOG_NEW_SAFE: 
    builder.setTitle(R.string.news_safe); 
    builder.setIcon(android.R.drawable.ic_menu_add); 

    LayoutInflater factory = LayoutInflater.from(this); 
    View newSafeView = factory.inflate(R.layout.newsafe, null); 

    builder.setView(newSafeView); 
    builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){ 
    public void onClick(DialogInterface dialog, int which) { 
*  EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name); 
     String safeName = safeNameEditText.getText().toString(); 
     Log.i(LOG, safeName); 
     setSafeDao(safeName); 
    }  
    }); 

    builder.setNegativeButton(R.string.cancel, new AlertDialog.OnClickListener(){ 
    public void onClick(DialogInterface dialog, int which) { 
     dialog.dismiss(); 
    } 
    }); 
    return(builder.create()); 
    default: 
    return(null); 
    } 
} 

ответ

3

Я думаю, вы должны ссылаться на вид, так как диалоговое окно делает не видеть, что поле edittext:

EditText safeNameEditText = (EditText) newSafeView.findViewById (R.id.new_safe_name);

0

Не совсем ответ на ваш вопрос, но это поможет вам добиться того, что вы пытаетесь сделать ...

final EditText safeNameEditText = (EditText) findViewById(R.id.new_safe_name); 
builder.setPositiveButton(R.string.ok, new AlertDialog.OnClickListener(){ 
public void onClick(DialogInterface dialog, int which) { 
    String safeName = safeNameEditText.getText().toString(); 
    Log.i(LOG, safeName); 
    setSafeDao(safeName); 
}  
}); 
+0

спасибо, я думал, что на самом деле может получить EditText, но safeNameEditText по-прежнему является нулевым. нет подсказки почему ... мне нужно сделать что-то особенное, чтобы найти представление, если оно является частью диалога? – wuntee

+0

findViewById использует представление, которое в настоящее время установлено для Activity. Если идентификатор отсутствует в этом представлении, он возвращает null. – Prashast

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

  • Нет связанных вопросов^_^