Как создать пользовательские настройки с помощью нейтральной кнопки? - PullRequest
8 голосов
/ 04 мая 2011

Я использую приведенный ниже код для создания пользовательских настроек. Файл макета xml имеет Button, EditText и TextView. Этот пользовательский макет отображается внутри Alert с кнопками «ОК» и «Отмена». Это все хорошо работает.

Я хотел бы добавить третью кнопку (нейтральную кнопку) рядом с кнопками "ОК" и "Отмена". Я экспериментировал с классом AlertBuilder, но не могу понять, как включить обе мои пользовательские XML-разметки и нейтральная кнопка.

Как это можно сделать?

В настоящее время есть ...

public class MelsMessage extends DialogPreference {

    Button bMessage;
    EditText eMessage;
    TextView tMessage;

    public MelsMessage(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }



    protected View onCreateDialogView() {

        LayoutInflater layoutInflater = LayoutInflater.from(getContext());
        View view = layoutInflater.inflate(R.layout.dialog_pref_mess, null);

        //UI elements

        bMessage = (Button) view.findViewById(R.id.buttonMessage);
        eMessage = (EditText) view.findViewById(R.id.edittextMessage);
        tMessage = (TextView) view.findViewById(R.id.textviewMessage);


        return view;        
    }

}

Ответы [ 3 ]

6 голосов
/ 12 мая 2014

Я вижу, что ваш вопрос немного стар, и, возможно, у вас уже есть ответ на ваш вопрос, но вот решение для вашего класса, которое расширяет DialogPreference.

Сначала необходимо Переопределить метод onPrepareDialogBuilder в вашем MelsMessage классе:

@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder)
{
    super.onPrepareDialogBuilder(builder);
    builder.setNeutralButton("hello", this);
}

this в методе setNeutralButton - это интерфейс DialogInterface.OnClickListener, который реализует класс DialogPreference .

Последнее, что вам нужно сделать, это Переопределить метод onClick в вашем MelsMessage классе:

@Override
public void onClick(DialogInterface dialog, int which)
{
    super.onClick(dialog, which);

    switch (which)
    {
        case DialogInterface.BUTTON_POSITIVE:
            // do things for the right button
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            // do things for the left button
            break;

        default:
            // do things for the center button
            break;
    }
}

Если вы хотите обработать щелчок в другом классе, все, что вам нужно сделать, это реализовать DialogInterface.OnClickListener в этом классе.

Надеюсь, это поможет вам. Приветствия.

0 голосов
/ 26 апреля 2014

вы можете создать собственный диалог с 3 кнопками или написать код, как

Dialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {



    } }); 

 Dialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancle", new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {



    }}); 

 Dialog.setButton(AlertDialog.BUTTON_NEUTRAL, "Do Nothing" new DialogInterface.OnClickListener() {

      public void onClick(DialogInterface dialog, int id) {


    }});
0 голосов
/ 15 июля 2012

Когда вы переопределяете onCreateDialogView и не устанавливаете setPositiveButton и setNegativeButton, кнопки ОК и Отмена должны исчезнуть, не так ли?Потому что в этом методе вы переопределяете макет по умолчанию и настраиваете собственный.

Если это так, то вы должны создать свой собственный нижний макет с 3 кнопками и добавить его в надутую.Попробуйте найти и реализовать «нижнюю панель кнопок», в которой есть все необходимые реализации, потому что я не вижу в документах какого-либо метода или способа реализации нейтральной кнопки, как в обычном диалоге.

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