Codename One - 正确使用Picker

时间:2018-04-09 13:07:29

标签: codenameone

我正在尝试对Picker的使用做一个明确的问题,因为我之前的问题还不够明确:Codename One - addActionListener of a Picker

Picker的目的是从一个集合中选择一个元素,例如一组字符串的字符串,是不是?所以,我想让用户有机会从一组字符串中选择一个字符串,每个字符串对应一种语言。

问题是添加到Picker的ActionListener的使用不正确,因为它是由“Ok”和“Cancel”按钮触发的。

我只需要执行一些代码(更改语言),并且只有当用户按下“确定”时才会执行该代码,因为如果用户按“取消”执行该代码应被视为意外行为和错误(从此点开始)用户的观点。)

所以我的问题是如何在这个用例中正确使用Picker。

2 个答案:

答案 0 :(得分:2)

从CN1文档中,一种方法是:

String [] list = {"one" , "two" , "three"};
Picker picker = new Picker ();
picker.setType(Display.PICKER_TYPE_STRINGS);
picker.setStrings(list);
picker.setSelectedString("test");

picker.addActionListener(l -> System.out.println(picker.getSelectedString()));

奇怪的是,正如Francesco之前指出的那样,当您在模拟器中运行应用程序时,按下选择器内的取消按钮,它会打印出所选的字符串。按OK按钮时相同。 (这是为了吗?)

在已安装的设备上,结果似乎是混合的,在某些设备上,取消操作不会在任何操作中产生。

答案 1 :(得分:2)

我必须这样做以避免在字符串上触发另一个侦听器(我使用带有更改侦听器的Property)如果按下了Cancel,我通过检查当前选择器字符串与前一个选定字符串来查看是否它改变了。如果值已更改,我只更新了字段或局部变量(在我的情况下为Property)。修改上一个答案的代码:

...
private String currentSelection;
...

String [] list = {"one" , "two" , "three"};
Picker picker = new Picker ();
picker.setType(Display.PICKER_TYPE_STRINGS);
picker.setStrings(list);
picker.setSelectedString("test");

picker.addActionListener(l -> {
   if (!picker.getSelectedString.equals(currentSelection) {
      currentSelection = picker.getSelectedString;
      System.out.println(currentSelection);
   }
});