Java 列出codenameone中的渲染器问题

Java 列出codenameone中的渲染器问题,java,list,codenameone,renderer,Java,List,Codenameone,Renderer,我使用列表渲染器,所有的工作都很好。然后,我保留了一个提取最后点击的项目,如下所示:渲染器中有3个按钮。button1在所有情况下都有效,但是button2和button3在某些情况下有效,而在其他情况下不起作用?为什么? 如果我从下面的代码中删除If(lastClickedButton!=null),它会为之前在其他列表项中工作的同一个按钮提供NullPointerException 霉菌代码: @Override protected boolean initListModelList

我使用列表渲染器,所有的工作都很好。然后,我保留了一个提取最后点击的项目,如下所示:渲染器中有3个按钮。button1在所有情况下都有效,但是button2和button3在某些情况下有效,而在其他情况下不起作用?为什么? 如果我从下面的代码中删除
If(lastClickedButton!=null)
,它会为之前在其他列表项中工作的同一个按钮提供
NullPointerException

霉菌代码:

@Override
    protected boolean initListModelListEmergencyList(List cmp) {
        cmp.setModel(new com.codename1.ui.list.DefaultListModel(emergencyPoliceArray));
        cmp.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                for (int i = 0; i < emergencyPoliceArray.size(); i++) {
                    if (cmp.getSelectedItem() == emergencyPoliceArray.get(i)) {

                        lastClickedButton = ((GenericListCellRenderer) cmp.getRenderer()).extractLastClickedComponent();
                        if (lastClickedButton != null) {
                            System.out.println("Phn no: " + lastClickedButton.getText());
                    }
                }
            }
        }
    }
    );

return true;
    }
@覆盖
受保护的布尔initListModelListMergencyList(列表cmp){
setModel(新的com.codename1.ui.list.DefaultListModel(EmergencyPolicyArray));
cmp.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
对于(int i=0;i
MyConnection:

private void showEmergencyDetails() {
        JSONParser p = new JSONParser();
        Hashtable<String, Object> test;
        try {
            test = p.parse(new InputStreamReader(is));
            Vector emergencyVector = (Vector) test.get("root");
            emergencyPoliceArray = new ArrayList<Map<String, String>>();
            for (int j = 0; j < emergencyVector.size(); j++) {
                Hashtable hm = (Hashtable) emergencyVector.get(j);
                String title = (String) hm.get("title");
                String location = (String) hm.get("location");
                Vector phn = (Vector) hm.get("phone");
                for (int i = 0; i < phn.size(); i++) {
                    Hashtable hphn = (Hashtable) phn.get(i);
                    String phone1 = (String) hphn.get("phn1");
                    String phone2 = (String) hphn.get("phn2");
                    String phone3 = (String) hphn.get("phn3");
                    HashMap<String, String> mp = new HashMap<String, String>();
                    mp.put("Phn", phone1);
                    mp.put("Phone2", phone2);
                    mp.put("Phone3", phone3);
                    mp.put("NameHeading", "Name");
                    mp.put("PhnHeading", "Phn no.");
                    mp.put("LocationHeading", "Location");
                    mp.put("Title", title);
                    mp.put("Name", title);
                    mp.put("Location", location);
                    emergencyPoliceArray.add(mp);
                }
            }
        } catch (IOException ex) {
        }
        showForm("EmergencyListDetails", null);
    }
private void showEmergencyDetails(){
JSONParser p=新的JSONParser();
哈希表测试;
试一试{
test=p.parse(新的InputStreamReader(is));
向量紧急向量=(向量)test.get(“根”);
EmergencyPolicyArray=新ArrayList();
对于(int j=0;j
如果渲染器条目之间存在差异(例如,一个条目有按钮,而另一个条目没有),这可能会影响所有列表,而不仅仅是按钮可见的条目


当您进行交互时,我们强烈建议您避免使用列表。对于这样的用例,它充其量只是黑客行为,对于这样的普通用例,它并没有提供比容器更高的性能优势

如果渲染器条目之间存在差异(例如,一个条目有按钮,而另一个条目没有),这可能会影响所有列表,而不仅仅是按钮可见的条目

当您进行交互时,我们强烈建议您避免使用列表。对于这样的用例,它充其量只是黑客行为,对于这样的普通用例,它并没有提供比容器更高的性能优势