Пустая строка передается в поле Пароль диалога в Android studio, но toast может отображать то, что было напечатано, почему? - PullRequest
0 голосов
/ 18 марта 2020

Я пытаюсь сделать простое диалоговое окно с предупреждением для пользователя, чтобы ввести имя пользователя и пароль и отправить его обратно в приложение и закрыть диалоговое окно. Я нахожусь на этапе, когда я пытаюсь просто ввести текст в поля редактирования текста как строки, но когда я пытаюсь добавить их в строку, они пусты. Но тост показывает, что было введено в поле, как в примере ниже: Почему строки pwtest и untest пустые?

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;


public class createid extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.create, null);
        AlertDialog.Builder builder= new AlertDialog.Builder(getActivity());

    builder.setTitle("Create ID");
    builder.setView(view);

    final EditText userid = view.findViewById(R.id.newusername);
    final EditText password = view.findViewById(R.id.newpassword);

    final String pwtest = password.getText().toString();
    final String untest = userid.getText().toString();

    builder.setNegativeButton("Cancel", null);
    builder.setPositiveButton("Create ID", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {


            Toast.makeText(getActivity(), "User ID:" +userid.getText().toString() + "Password:" + password.getText().toString() +
                    "userstring is:" + untest + "password string is:" + pwtest, Toast.LENGTH_LONG).show();
        }
    });

    return builder.create();
}

@Override
public void onCancel(DialogInterface dialog) {
    super.onCancel(dialog);
    Toast.makeText(getActivity(), "Dialog Cancelled", Toast.LENGTH_SHORT).show();
}

}

1 Ответ

1 голос
/ 18 марта 2020

Вы вызываете код не в то время, проблема в том, что вы запрашиваете значение в тексте редактирования, прежде чем пользователь сможет что-либо сделать с текстом редактирования, таким образом, вы получаете пустую строку

Этот код должен быть добавлен в интерфейс onClick вместо инициализированного

Правильный код:

   @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        View view = getActivity().getLayoutInflater().inflate(R.layout.create, null);
        AlertDialog.Builder builder= new AlertDialog.Builder(getActivity());

    builder.setTitle("Create ID");
    builder.setView(view);

    final EditText userid = view.findViewById(R.id.newusername);
    final EditText password = view.findViewById(R.id.newpassword);



    builder.setNegativeButton("Cancel", null);
    builder.setPositiveButton("Create ID", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {

 // You should get the String value here, after they're done writing in edit text.
 final String pwtest = password.getText().toString();
    final String untest = userid.getText().toString();


            Toast.makeText(getActivity(), "User ID:" +userid.getText().toString() + "Password:" + password.getText().toString() +
                    "userstring is:" + untest + "password string is:" + pwtest, Toast.LENGTH_LONG).show();
        }
    });

    return builder.create();
}
...