Проверка нуля в окне EditText в диалоговом окне оповещения - Android - PullRequest
6 голосов
/ 05 апреля 2010

Я пытаюсь добавить проверку текста в текстовое поле редактирования, расположенное в диалоговом окне предупреждения.Он предлагает пользователю ввести имя.

Я хочу добавить некоторую проверку, чтобы, если то, что они ввели, было пустым или нулевым, оно ничего не делало, кроме создания ошибки, произносящей Toast.*

    AlertDialog.Builder alert = new AlertDialog.Builder(this);
    alert.setTitle("Record New Track");
    alert.setMessage("Please Name Your Track:");
    // Set an EditText view to get user input
    final EditText trackName = new EditText(this);
    alert.setView(trackName);
    alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int whichButton) {

            String textString = trackName.getText().toString(); // Converts the value of getText to a string.
            if (textString != null && textString.trim().length() ==0)
            {   

                Context context = getApplicationContext();
                CharSequence error = "Please enter a track name" + textString;
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, error, duration);
                toast.show();


            }
            else 
            {

                SQLiteDatabase db = waypoints.getWritableDatabase();
                ContentValues trackvalues = new ContentValues();
                trackvalues.put(TRACK_NAME, textString);
                trackvalues.put(TRACK_START_TIME,tracktimeidentifier );
                insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues);

            }

Но это просто закрывает диалог Alert и затем отображает тост.Я хочу, чтобы диалоговое окно оповещения оставалось на экране.

Спасибо

Ответы [ 5 ]

3 голосов
/ 22 ноября 2011

Я создаю новый метод внутри своего класса, который показывает предупреждение, и помещаю весь код для создания предупреждения в этот один метод. затем после вызова тоста я вызываю этот метод. Скажем, я назвал этот метод createAlert (), тогда у меня есть,

  createAlert(){

 AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Record New Track");
alert.setMessage("Please Name Your Track:");
// Set an EditText view to get user input
final EditText trackName = new EditText(this);
alert.setView(trackName);
alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {

        String textString = trackName.getText().toString(); // Converts the value of getText to a string.
        if (textString != null && textString.trim().length() ==0)
        {   

            Context context = getApplicationContext();
            CharSequence error = "Please enter a track name" + textString;
            int duration = Toast.LENGTH_LONG;

            Toast toast = Toast.makeText(context, error, duration);
            toast.show();
            createAlert();



        }
        else 
        {

            SQLiteDatabase db = waypoints.getWritableDatabase();
            ContentValues trackvalues = new ContentValues();
            trackvalues.put(TRACK_NAME, textString);
            trackvalues.put(TRACK_START_TIME,tracktimeidentifier );
            insertid=db.insertOrThrow(TRACK_TABLE_NAME, null, trackvalues);

        }
}
3 голосов
/ 06 апреля 2010

Я думаю, вам следует воссоздать Dialog, так как кажется, что DialogInterface, заданный в качестве параметра в onClick(), не дает вам возможности остановить закрытие Dialog.

У меня также есть пара советов для вас:

Попробуйте использовать Activity.onCreateDialog(), Activity.onPrepareDialog() и, конечно, Activity.showDialog(). Они значительно упрощают использование диалогов (по крайней мере для меня), также использование диалогов больше похоже на использование меню. Используя эти методы, вы также сможете более легко показывать диалог снова.

Я хочу дать вам совет. Это не ответ на ваш вопрос, но делать это в ответе гораздо удобнее для чтения.

Вместо удержания ссылки на объект AlertDialog.Builder(), вы можете просто сделать:

new AlertDialog.Builder(this)
.setTitle("Record New Track")
.setMessage("Please Name Your Track:")
//and some more method calls
.create();
//or .show();

Сохраняет вам ссылки и много печатает;). (почти?) Все методы AlertDialog.Builder возвращают объект AlertDialog.Builder, к которому можно напрямую вызывать метод.

То же самое относится к Toast с:

Toast.makeText(this, "Please enter...", Toast.LENGTH_LONG).show();
1 голос
/ 25 октября 2010

Что вам нужно сделать, это создать собственный макет xml, включающий текстовое поле и кнопку Ok, вместо использования .setPositiveButton. Затем вы можете добавить прослушиватель щелчков на кнопку, чтобы проверить данные и закрыть диалоговое окно.

Должен использоваться в CreateDialog:

protected Dialog onCreateDialog(int id) 
{
            LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);

if (id==EDIT_DIALOG)
{
            final View layout = inflater.inflate(R.layout.edit_dialog, (ViewGroup) findViewById(R.id.Layout_Edit));

            final Button okButton=(Button) layout.findViewById(R.id.Button_OkTrack);
            final EditText name=(EditText) layout.findViewById(R.id.EditText_Name);
            okButton.setOnClickListener(new View.OnClickListener() 
            {
                public void onClick(View v) {
                    String textString = trackName.getText().toString(); 
                    if (textString != null && textString.trim().length() ==0)
                    {
                        Toast.makeText(getApplicationContext(), "Please enter...", Toast.LENGTH_LONG).show();
                    } else
                        removeDialog(DIALOG_EDITTRACK);
                }
            });            
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setView(layout);
            builder.setTitle("Edit text");

            AlertDialog submitDialog = builder.create();            
            return submitDialog;
}
0 голосов
/ 05 марта 2013

// если представление не было создано, оно всегда возвращает ноль для значений текста редактирования.

View v = inflater.inflate(R.layout.new_location_dialog, null);
builder.setView(v); 



final EditText titleBox = (EditText)v.findViewById(R.id.title);
final EditText descriptionBox = (EditText)v.findViewById(R.id.description); 
0 голосов
/ 24 января 2012

Используйте этот код для отображения диалога.

 public void onClick(DialogInterface dialog, int whichButton) {

            String textSt`enter code here`ring = trackName.getText().toString(); // Converts the value of getText to a string.
            if (textString != null && textString.trim().length() ==0)
            {       
                Context context = getApplicationContext();
                CharSequence error = "Please enter a track name" + textString;
                int duration = Toast.LENGTH_LONG;

                Toast toast = Toast.makeText(context, error, duration);
                toast.show();

                new AlertDialog.Builder(this)
                .setTitle("Message")
                .setMessage("please enter valid field")
                .setPositiveButton("OK", null).show();            
            }

Это создаст диалог для вас, editText пусто или какие условия вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...