Topic: Диалоговые окна

Обсуждение статьи Диалоговые окна с AlertDialog

Re: Диалоговые окна

В статье не указано, как объявлять класс диалога в манифесте. <activity></activity> не работает.

Re: Диалоговые окна

Если не указано, значит и не нужно.

Re: Диалоговые окна

Без объявления в манифесте приложение крашит при попытке вызвать диалоговое окно.

Re: Диалоговые окна

А почему вы решили, что это связано с отсутствием записи в манифесте?

Re: Диалоговые окна

Симптомы те же, что и при попытке вызвать Activity, не указанную в манифесте. Других неисправностей я обнаружить не смог.

Re: Диалоговые окна

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

Re: Диалоговые окна

А вот такой вопрос:
Можно ли сделать так, чтобы вместо надписей  в диалоговом окне были иконки?
В смысле хочу сделать диалоговое окно типа разобранного в примере setSingleChoiceItems , но надписи мне не нужны, а иконки готовы
И может быть даже в несколько столбцов  эти иконки
или, как вариант, диалог обыкновенный, без радиобаттонов или чекбаттонов, но вместо кнопок-надписей иконки (трех мало, мне штук 12 надо)
(интерфнейс для ввода шахматной позиции пытаюсь придумать)

Re: Диалоговые окна

В этом уроке обсуждается определенный вид окна. В вашем случае нужно другое диалоговое окно со своей разметкой.

10 (edited by sxakludanto 2016-06-04 11:57:25)

Re: Диалоговые окна

А как сделать модльный диалог? Я вот просомтрел обе статьи (в том числе старую) и при помощи тостов понял, что после всяких там  showDialog или myDialogFragment.show все продолжается, а не ждется, когда пользователь скажет ок-кансел
В смысле, есть введенные как-то данные, нажимается кнопка, по этим данным у машины есть вопросы, которые она очевидным образом спрашивает пользователя диалогом. Разумеется, пока человек на это не ответит, продолжать вычисления бессмысленно...

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

Re: Диалоговые окна

Добрый день. Непонятное что-то происходит с setCancelable() - у меня диалог закрывается независимо от переданного в метод значения... В смысле, если помимо диалога пальцем ляпнуть, в затененную активность.
Порылся по исходникам, нашел такое:

(Dialog.java, строки 654-671)
    /**
     * Called when a touch screen event was not handled by any of the views
     * under it. This is most useful to process touch events that happen outside
     * of your window bounds, where there is no view to receive it.
     * 
     * @param event The touch screen event being processed.
     * @return Return true if you have consumed the event, false if you haven't.
     *         The default implementation will cancel the dialog when a touch
     *         happens outside of the window bounds.
     */
    public boolean onTouchEvent(@NonNull MotionEvent event) {
        if (mCancelable && mShowing && mWindow.shouldCloseOnTouch(mContext, event)) {
            cancel();
            return true;
        }
        
        return false;
    }

Исходя из условия в if получается, что mCancelable=true как раз для закрытия диалога... Становится вообще непонятно, как это действует...
Александр, можете пояснить?

Re: Диалоговые окна

я давно не использовал диалоговые окна, подробностей не помню. Кстати, попробуйте еще метод dialog.setCanceledOnTouchOutside(false);

Re: Диалоговые окна

Александр,
Да, спасибо, с этим методом работает корректно.

14 (edited by tuta 2017-12-25 19:20:12)

Re: Диалоговые окна

Здравствуйте, Александр! Не могли бы вы показать весь код главной активности или помочь разобраться с моим? У меня что-то не вяжется. Вот скрин с моим кодом и ошибкой: https://yadi.sk/i/cm_CHPRu3QwEoR .

Re: Диалоговые окна

Скорее все вы неправильно написали код для MyDialogFragment. Ничего не пропустили?

16 (edited by tuta 2017-12-26 15:26:53)

Re: Диалоговые окна

Да нет, вроде ничего не пропустил. Даже копипастить пробовал, ничего не меняется.

Re: Диалоговые окна

Код фрагмента в студию. Я вам не верю ))

18 (edited by tuta 2017-12-26 16:25:39)

Re: Диалоговые окна

Да пожалуйста:

package com.example.andrei.alertdialog;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.widget.Toast;

public class MyDialogFragment extends DialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        String title = "Выбор есть всегда";
        String message = "Выбери пищу";
        String button1String = "Вкусная пища";
        String button2String = "Здоровая пища";

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(title);  // заголовок
        builder.setMessage(message); // сообщение
        builder.setPositiveButton(button1String, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Toast.makeText(getActivity(), "Вы сделали правильный выбор",
                        Toast.LENGTH_LONG).show();
            }
        });
        builder.setNegativeButton(button2String, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                Toast.makeText(getActivity(), "Возможно вы правы", Toast.LENGTH_LONG)
                        .show();
            }
        });
        builder.setCancelable(true);

        return builder.create();
    }
}

Re: Диалоговые окна

Вы используете разные библиотеки. DialogFragment у вас от android.support.v4, а FragmentManager от android.app. Я в какой-то статье предупреждал об этом. Или используйте связку android.app.DialogFragment и android.app.FragmentManager (ваш вариант) или android.support.v4.app.DialogFragment c FragmentManager manager = getSupportFragmentManager(); если использовать AppCompatActivity

Re: Диалоговые окна

Спасибо!

Re: Диалоговые окна

Доброго времени суток!!!
Не подскажет кто как сделать диалог с 3 кнопками и прогресс баром???
пробовал через .setView(Layout)
кнопки и прогресс бар отображаются,но вот как на них поставить листнер и управлять прогресс баром...?)

Re: Диалоговые окна

nikola.gundyrev wrote:

Доброго времени суток!!!
Не подскажет кто как сделать диалог с 3 кнопками и прогресс баром???
пробовал через .setView(Layout)
кнопки и прогресс бар отображаются,но вот как на них поставить листнер и управлять прогресс баром...?)

Пример с тремя кнопками есть в уроке, с этим проблем у Вас возникнуть не должно...
А прогресс-бар... Не уверен, что такое получится. Диалог - это диалог, все-таки... Расскажите подробнее, что хотите сделать, для чего Вам прогресс-бар - подумаем, как быть.

Re: Диалоговые окна

Я пишу сервер, и клиентов отображаю в список при нажатие на элемент которого нужно что бы открывался элемент управления этим клиентом,а в прогресс бар должен отображать данные которые присылает клиент.
в списке точно такиеже прогресс бары,но они работает правильно.Если через setView делать то progress bar отображается,но как им управлять?!)

Re: Диалоговые окна

nikola.gundyrev wrote:

Я пишу сервер, и клиентов отображаю в список при нажатие на элемент которого нужно что бы открывался элемент управления этим клиентом,а в прогресс бар должен отображать данные которые присылает клиент.
в списке точно такиеже прогресс бары,но они работает правильно.Если через setView делать то progress bar отображается,но как им управлять?!)

И Вы в диалоговое окно выводите элементы управления, правильно понимаю? А почему в отдельную Activity не хотите этот функционал перенести?
Да, и здесь же вопрос - данные от клиентов как именно получаете? Предположу, что есть отдельный поток для этого, который как-то сообщает полученные данные... возможно, в активность, которая со списком?

Re: Диалоговые окна

NeferSky wrote:

И Вы в диалоговое окно выводите элементы управления, правильно понимаю? А почему в отдельную Activity не хотите этот функционал перенести?
Да, и здесь же вопрос - данные от клиентов как именно получаете? Предположу, что есть отдельный поток для этого, который как-то сообщает полученные данные... возможно, в активность, которая со списком?

да есть несколько потоков(каждый отвечает за своего клиента), организовано на сокетах,
данные получаю и передаю в основную активити как json объект,
Я пробовал в другой активити управление организовать, но как тогда передать экземпляр класса потока конкретного клиента что бы отправить ему команду?