Codenameone 如何检测退出表单时是否仍在编辑输入字段?

Codenameone 如何检测退出表单时是否仍在编辑输入字段?,codenameone,Codenameone,在我的应用程序中,我使用actionListeners捕捉用户何时输入数据,然后更新对象。但是,我注意到,如果用户在编辑文本区域时退出表单(previousForm.showBack()),或者没有在选择器中单击“完成”,则此操作不起作用。这实际上是一个非常常见的用例,因为用户直接输入数据并离开表单,这意味着数据经常丢失 是否有办法处理此问题,例如,检测字段是否仍在编辑中,并在用户退出表单时“强制”更新?理想情况下,它应该简单地触发通常的actionListener,以避免重复代码 我注意到了F

在我的应用程序中,我使用actionListeners捕捉用户何时输入数据,然后更新对象。但是,我注意到,如果用户在编辑文本区域时退出表单(previousForm.showBack()),或者没有在选择器中单击“完成”,则此操作不起作用。这实际上是一个非常常见的用例,因为用户直接输入数据并离开表单,这意味着数据经常丢失

是否有办法处理此问题,例如,检测字段是否仍在编辑中,并在用户退出表单时“强制”更新?理想情况下,它应该简单地触发通常的actionListener,以避免重复代码


我注意到了Form.getCurrentInputDevice(),但不了解它的用途,所以不确定这是否是一个解决方案?

我试图将其提取到一个测试用例中,但这对我有效。这不是必需的,应该是无缝的:

Form hi = new Form("Hi World", BoxLayout.y());
Button gotoFormB = new Button("Go To B");
Label text = new Label(" ");
hi.add(gotoFormB);
hi.add(text);
hi.show();

gotoFormB.addActionListener(e -> {
    Form formB  = new Form("Form B", BoxLayout.y());
    TextField tf = new TextField();
    formB.add(tf);
    tf.addActionListener(ee -> text.setText(tf.getText()));
    formB.getToolbar().setBackCommand("Back", ee -> {
        hi.showBack();
    });
    formB.show();
});

您可以使用
.addDataChangedListener()
并将数据保存到首选项。 比如说,

nameTextField.addDataChangedListener((evt1, evt2)->{
     if(nameTextField.getText().trim().length()>0){
         Preferences.set("name", nameTextField.getText().trim());
     }
});
然后,如果您返回并回到这个表单,您只需检索
String savedNameInput=Preferences.get(“name”,”)

谢谢,我确认它对TextField有效。但它似乎不适用于选择器(轻量级)-如果选择器打开并显示日期,然后我离开屏幕,则不会触发选择器的actionListener,并且该值会丢失。我应该报告一个错误吗?在iOS上,我确认它适用于本机选取器,因为似乎iOS本身阻止在屏幕打开时离开屏幕。如何离开选取器?我只是让选取器打开,然后单击“上一步”。它通过向上面的测试中添加以下代码来显示:Picker p=new Picker();p、 setType(显示选择器类型和日期);p、 addActionListener(ee->text.setText(p.getDate().toString());表B.添加(p);单击选取器,设置日期,保持打开状态,然后直接单击“上一步”。如果在选取器外单击,则实际上是在取消选取器,因此我认为这是正确的行为。好的,谢谢,我理解我描述的情况下,TextField和选取器的行为不同(为了简单起见,使用相同的行为当然是理想的)。在任何情况下,是否有办法拦截分拣机取消以不丢失输入的日期?您是否考虑扩展当前行为来触发ActualListor,甚至取消?