В моем приложении J2ME я хочу отображать диалоговое окно предупреждения только когда пользователь изменяет состояние любых элементов управления, то есть когда пользователь использует любой элемент управления формы, а затем пытается отменить форму без сохранение введенных данных.
Например, среди всех 5-6 элементов управления формы, если пользователь вводит 1-2 текстовых поля и пытается отменить форму, не сохраняя введенные данные в базу данных. Затем должно появиться окно предупреждения с сообщением «Сохранить изменения?». командой Yes, No
.
Как это сделать?
Это мой код, который не дает желаемого результата:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class InformAboutStatechange extends MIDlet implements CommandListener
{
Display d;
Form frm;
Command Save, Cancel, CancelAlrtYes, CancelAlrtNo, CancelAlrtBack;
TextField Name, Age;
Alert CancelAlrt;
boolean StateChange = false;
public InformAboutStatechange()
{
d = Display.getDisplay(this);
frm = new Form("");
Save = new Command("Save", Command.SCREEN, 1);
Cancel = new Command("Cancel", Command.CANCEL, 2);
Name = new TextField("Name", "", 10, 0);
Age = new TextField("Age", "", 10, 0);
frm.addCommand(Save);
frm.addCommand(Cancel);
frm.append(Name);
frm.append(Age);
frm.setCommandListener(this);
d.setCurrent(frm);
}
public void startApp()
{
}
public void pauseApp()
{
}
public void destroyApp(boolean unconditional)
{
}
public void commandAction(Command c, Displayable dispable)
{
if (c == Cancel) {
CancelAlrt = new Alert("Application Alert","Save Changes???",null,null);
CancelAlrtYes = new Command("Yes",Command.SCREEN, 1);
CancelAlrtNo = new Command("No", Command.SCREEN | Command.CANCEL, 2);
CancelAlrtBack = new Command("Back", Command.BACK, 3);
CancelAlrt.addCommand(CancelAlrtYes);
CancelAlrt.addCommand(CancelAlrtNo);
CancelAlrt.addCommand(CancelAlrtBack);
frm.setItemStateListener(new ItemStateListener()
{
public void itemStateChanged(Item item)
{
item.notifyStateChanged();
if (item == Name) {
if (item == Age) {
StateChange = true;
} else {
StateChange = false;
}
}
}
});
if (StateChange == true) {
d.setCurrent(CancelAlrt);
CancelAlrt.setCommandListener(new CommandListener()
{
public void commandAction(Command cmd, Displayable dispable)
{
if (cmd == CancelAlrtYes) {
d.setCurrent(frm);
} else if (cmd == CancelAlrtNo) {
d.setCurrent(frm);
} else if (cmd == CancelAlrtBack) {
d.setCurrent(frm);
}
}
});
} else {
destroyApp(true);
notifyDestroyed();
}
}
}
}