Что я пытаюсь сделать, это создать собственный диалог, который переопределяет AlertDialog.Предполагается, что он должен получить некоторый текст (по крайней мере, 2 строки), а затем для каждой из этих строк должен быть в состоянии получить больше информации, но я хочу сделать это в пользовательских диалогах.Итак, что должно произойти, так это то, что пользователь может ввести 2 человек на экране активности, а затем для первого лица вы получите пользовательский диалог, и этот человек сможет ввести три слова, а затем он перейдет к следующему пользовательскому диалогу (точно так жемакет я раздуваю) и второй человек может ввести несколько слов.
Это мой 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;
}
Я думаю, что то, что я пытаюсь найти, в некоторой степени обсуждалось здесь: Значение EditText в настраиваемом диалоге Android - настраиваемоеДиалог - Не удается получить текст из EditText Как добавить два поля редактирования текста в диалоговом окне с предупреждением Проблема, я полагаю, заключается здесь, где все примеры имеют свой 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 по их идентификатору напрямую, без предварительного прохождения его родительского linearlayout, он также возвращает нулевое значение.
На данный момент я не уверен, что делать, кроме как втиснуть все, что у меня есть в этих отдельных функциях, в один и тот же клик, но я действительно не хочу этого делать.Что еще я могу сделать, чтобы получить доступ к этим правкам?
Любая помощь будет принята с благодарностью!