Как управлять AlertDialog - PullRequest
1 голос
/ 01 июля 2011

Я создал приложение, которое включает всплывающее окно с различным диалогом.Код, который я написал:

if (lDiffFromToday >= 0 && lDiffFromToday <= DeclareVariable.CYCLE_MAX_LENGTH)
            {

                AlertDialog.Builder alrtStartMonitoring = new AlertDialog.Builder(this);
                alrtStartMonitoring.setTitle("              Start Monitoring");
                alrtStartMonitoring.setMessage("Set start date of cycle as"+" "+sdFormatter.format(dtSelDate));
                alrtStartMonitoring.setPositiveButton("Yes", this);
                AlertDialog alert = alrtStartMonitoring.create();
                alert.show();
            }   

else if (dtSelDate.getTime()> dtStartDate.getTime() && dtSelDate.getTime() <= currentDate.getTime() && !bCycleStopped)
        {
            long lDiffFromStart =dtSelDate.getTime()-dtStartDate.getTime();
            lDiffFromStart=lDiffFromStart/(1000 * 60 * 60 * 24);
            if (lDiffFromStart >= DeclareVariable.CYCLE_MIN_LENGTH)
            {
                 bActionOk = true;
                 AlertDialog.Builder alrtStartMonitoring = new AlertDialog.Builder(this);
                 alrtStartMonitoring.setTitle("             Confirm New Cycle");
                 alrtStartMonitoring.setMessage("Set start date of cycle as" + " " + sdFormatter.format(dtSelDate));
                 alrtStartMonitoring.setPositiveButton("Yes", this);
                 AlertDialog alert = alrtStartMonitoring.create();
                 alert.show();
            }
}


public void onClick(DialogInterface dialog, int id) 
    {
        CycleManager.getSingletonObject().setHistoryDate(dtSelDate);
        int iStopStartCount = CycleManager.getSingletonObject().getStopStartCount();                
        if(iStopStartCount>0)
            CycleManager.getSingletonObject().setStopStartDate(dtSelDate, iStopStartCount);
        displayDay();
    }

Теперь мой вопрос заключается в том, что для каждого диалога мне нужны разные функции onclick, но в моем случае, когда я пишу другую функцию onclick, не будет конфликта.Я знаю, что запись функции onclick внутри каждого диалога может решить проблему, но в этом случае я должен объявить свои переменные как окончательные, так как я могу сделать это, написав функцию onclick снаружи для каждого используемого мной диалога.

Ответы [ 3 ]

1 голос
/ 01 июля 2011

Другим решением будет сделать экземпляры AlertDialog членами вашего класса. Затем в методе OnClick:

public void onClick(DialogInterface dialog, int id) 
{
  if (dialog == m_Dialog1)
  {
    // server dialog 1
  }

}
0 голосов
/ 01 июля 2011

Почему бы не создать свои собственные DialogInterface.OnClickListener классы и создать их экземпляры с соответствующими переменными из вашего основного класса, которые вы не хотите отмечать как окончательные, но хотите, чтобы у них был доступ (вводить их эффективно).Тогда вы можете сделать

FooDialogOnClickListener l1 = new FooDialogOnClickListener(dtSelData, ...);
BarDialogOnClickListener l2 = new BarDialogOnClickListener(iStopStartCount, ...);

if (...) {
    // ...
    alrtStartMonitoring.setPositiveButton("Yes", l1);
} else {
    // ...
    alrtStartMonitoring.setPositiveButton("Yes", l2);
}
0 голосов
/ 01 июля 2011

Я вижу, что вы создали свой класс для реализации DialogInterface.OnClickListener

вместо

alrtStartMonitoring.setPositiveButton("Yes", this);

Вы можете сделать это таким образом

alrtStartMonitoring.setPositiveButton("Yes", new DialogInterface.OnClickListener() {

public void onClick (DialogInterface dialog, int which) {

}
});

и для каждого из setPositiveButton вы можете определить различного onClick слушателя

Надеюсь, это поможет

...