Я пытаюсь использовать аварийное диалоговое окно для запроса имя пользователя и пароль в андроиде. Я нашел этот код здесь:
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();
}
Править: Я смог настроить надлежащее расположение, но получить ошибку, когда я пытаюсь получить доступ к текстовому полю. Какова проблема здесь?
В Демонстрациях API в Android SDK есть пример, который делает именно это.
Это под DIALOG_TEXT_ENTRY
. У них есть макет, он надувается с помощью LayoutInflater
и используется как View.
РЕДАКТИРОВАТЬ: То, на что я ссылался в своем исходном ответе, устарело. Вот зеркало .
Посмотрите документы 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);
Проверьте этот код в окне предупреждения, чтобы отредактировать текстовое представление, когда нажмите «ОК», он отображается на экране. с помощью тостов.
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();
}