Как получить значение edittext из пользовательского AlertDialog, где поиск значений отсутствует в onClick? - PullRequest
1 голос
/ 12 декабря 2011

Что я пытаюсь сделать, это создать собственный диалог, который переопределяет 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, он также возвращает нулевое значение.

На данный момент я не уверен, что делать, кроме как втиснуть все, что у меня есть в этих отдельных функциях, в один и тот же клик, но я действительно не хочу этого делать.Что еще я могу сделать, чтобы получить доступ к этим правкам?

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 12 декабря 2011

Вы пытались использовать длинную версию inflate inflate (парсер XmlPullParser, корень ViewGroup, логическое attachToRoot)? Я знаю, что если вы не используете этот метод, могут возникнуть некоторые проблемы с захватом характеристик макета, что может быть причиной проблемы. Для группы просмотра вы должны выбрать параллельное представление для предупреждения и обычно хотите attachToRoof = false;

...