Что я пытаюсь сделать, так это создать настраиваемый диалог, который переопределяет AlertDialog. Что нужно сделать, так это получить текст (как минимум 2 строки), а затем для каждой из этих строк он должен получить больше информации, но я хочу сделать это в пользовательских диалогах. Так что должно случиться, что пользователь может ввести 2 человека на экране активности, а затем для первого человека вы получите настраиваемый диалог, и этот человек может ввести три слова, а затем он перейдет к следующему настраиваемому диалогу (точный тот же макет, который я раздуваю), и второй человек может ввести несколько слов.Как получить значение edittext из пользовательского AlertDialog, где поиск значений не в onClick?
Это мой XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinLay_Enter_Words"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/TextView_AddPlayerWord_Instruction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="@dimen/help_text_size"
android:textStyle="bold"></TextView>
<EditText
android:id="@+id/EditText_Word1"
android:layout_height="wrap_content"
android:maxLength="20"
android:layout_width="match_parent"
android:maxLines="1"></EditText>
<EditText
android:id="@+id/EditText_Word2"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:maxLines="1"></EditText>
<EditText
android:id="@+id/EditText_Word3"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:maxLines="1"></EditText>
</LinearLayout>
И это часть кода:
protected Dialog onCreateDialog(int id) {
switch (id) {
case NOUN_INPUT_DIALOG_ID:
Dialog returnedDialog = initWordDialog();
return(returnedDialog);
}
return null;
}
Он называет initWordDialog():
private Dialog initWordDialog() {
LayoutInflater inflater = LayoutInflater.from(this); //(LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogLayout = inflater.inflate(R.layout.word_entry_dialog, null);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
...
TextView v1 = (TextView) dialogLayout.findViewById(R.id.TextView_AddPlayerWord_Instruction);
...
v1.setText("SomeText");
builder.setView(dialogLayout);
builder.setTitle(R.string.enter_word_title);
builder.setPositiveButton("Next", onNextSubmit);
AlertDialog wordBuilderDialog = builder.create();
return wordBuilderDialog;
}
Я думаю, что я пытаюсь найти здесь было в некоторой степени обсуждено: Value of EditText in Custom Dialog Android - Custom Dialog - Can't get text from EditText How to add two edit text fields in an alert dialog Проблема, я считаю, лежит здесь, где все примеры имеют свой onClick в той же функции, что и onCreate. Мои вещи были немного сложнее, и я хотел выделить функции; однако в результате я не могу получить доступ к какой-либо переменной EditText.
Вот моя реализация OnClick:
private DialogInterface.OnClickListener onNextSubmit = new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (setPlayerWords()) {
...
}
};
Та часть, которая имеет значение, я даже не добраться до той части, где я доступ к edittexts, пока setPlayerWords называется, и это, где это не удается :
public boolean setPlayerWords() {
PMGamePlay pmObj = (PMGamePlay) getApplicationContext();
String[] playerWords = new String[pmObj.numberOfWordsPlayersGetToInput()];
//LayoutInflater inflater = LayoutInflater.from(this);
//View dialogLayout2 = inflater.inflate(R.layout.word_entry_dialog, null);
//setContentView(R.layout.word_entry_dialog);
final LinearLayout myLayout = (LinearLayout) findViewById(R.id.LinLay_Enter_Words);
final EditText w0 = (EditText) myLayout.findViewById(R.id.EditText_Word1);
final EditText w1 = (EditText) myLayout.findViewById(R.id.EditText_Word2);
final EditText w2 = (EditText) myLayout.findViewById(R.id.EditText_Word3);
String test = w0.getText().toString();
playerWords[0] = w0.getText().toString();
playerWords[1] = w1.getText().toString();
playerWords[2] = w2.getText().toString();
...
return true;
}
я сначала пытался повторно накачивания, но это, казалось, сброс и в то время как edittexts не будет нулевым, они были сброшены, чтобы иметь «» в своих значениях. Затем я попытался установитьContentView в свой XML-файл, но это все равно дало мне нулевое значение. Теперь я просто попробую просто получить доступ к linearlayout, а также возвращает нулевое значение. Если я просто попытаюсь получить доступ к edittexts по их идентификатору напрямую, не пройдя сначала его parent linearlayout, он также возвращает нулевое значение.
На данный момент я не уверен, что делать, кроме как перерезать все, что у меня есть в этих отдельных функциях, в один сингл onclick, но я действительно не хочу этого делать. Разве я ничего не могу сделать для доступа к этим edittexts?
Любая помощь была бы принята с благодарностью!
Используйте разные идентификаторы для каждого текста редактирования (уникально для всего приложения). – Noby
Это единственное место, где у меня есть edittexts во всем приложении. В другой раз, когда у меня был вход в активность, я программным образом добавил edittexts. – user1031885