Как добавить два текстовых поля редактирования в аварийном диалоговом окне

Я пытаюсь использовать аварийное диалоговое окно для запроса имя пользователя и пароль в андроиде. Я нашел этот код здесь:

  if (token.equals("Not Found"))
    {
        LayoutInflater factory = LayoutInflater.from(this);            
        final View textEntryView = factory.inflate(R.layout.userpasslayout, null);

        AlertDialog.Builder alert = new AlertDialog.Builder(this); 

        alert.setTitle("Please Login to Fogbugz"); 
        alert.setMessage("Enter your email and password"); 
        // Set an EditText view to get user input  
        alert.setView(textEntryView); 
        AlertDialog loginPrompt = alert.create();

        final EditText input1 = (EditText) loginPrompt.findViewById(R.id.username);
        final EditText input2 = (EditText) loginPrompt.findViewById(R.id.password);

        alert.setPositiveButton("Login", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
            input1.getText().toString(); **THIS CRASHES THE APPLICATION**


        } 
        }); 

        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int whichButton) { 
            // Canceled. 
          } 
        }); 

        alert.show(); 

    }

Править: Я смог настроить надлежащее расположение, но получить ошибку, когда я пытаюсь получить доступ к текстовому полю. Какова проблема здесь?

54
задан mbauer14 6 August 2010 в 10:15
поделиться

3 ответа

В Демонстрациях API в Android SDK есть пример, который делает именно это.

Это под DIALOG_TEXT_ENTRY . У них есть макет, он надувается с помощью LayoutInflater и используется как View.

РЕДАКТИРОВАТЬ: То, на что я ссылался в своем исходном ответе, устарело. Вот зеркало .

25
ответ дан 7 November 2019 в 07:49
поделиться

Посмотрите документы AlertDialog . В нем говорится, что для добавления настраиваемого представления в диалоговое окно предупреждения вам необходимо найти frameLayout и добавить к нему свое представление следующим образом:

FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom);
fl.addView(myView, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));

Скорее всего, вы захотите создать XML-файл макета для своего представления и раздуть его. это:

LayoutInflater inflater = getLayoutInflater();
View twoEdits = inflater.inflate(R.layout.my_layout, f1, false);
1
ответ дан 7 November 2019 в 07:49
поделиться

Проверьте этот код в окне предупреждения, чтобы отредактировать текстовое представление, когда нажмите «ОК», он отображается на экране. с помощью тостов.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final AlertDialog.Builder alert = new AlertDialog.Builder(this);
    final EditText input = new EditText(this);
    alert.setView(input);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            String value = input.getText().toString().trim();
            Toast.makeText(getApplicationContext(), value, 
                Toast.LENGTH_SHORT).show();
        }
    });

    alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {
            dialog.cancel();
        }
    });
    alert.show();               
}
61
ответ дан 7 November 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: