【问题标题】:Android ListView Item Selected EventAndroid ListView 项目选择事件
【发布时间】:2015-01-16 15:06:08
【问题描述】:

我正在尝试根据从列表视图中选择的项目在标记上弹出一个信息窗口。所以基本上当listview项被选中时,它会执行createCallOutView():

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View item,
                int position, long id) {

            float x = Float.parseFloat(_eventlist.get(position).getEventX());
            float y = Float.parseFloat(_eventlist.get(position).getEventY());

            ENeighbourhoodActivity.callout.hide();
            int[] graphicIDs = ENeighbourhoodActivity.graphicsLayer.getGraphicIDs(x, y, 25);
            if (graphicIDs != null && graphicIDs.length > 0) {
                Graphic gr = ENeighbourhoodActivity.graphicsLayer.getGraphic(graphicIDs[0]);
                Point location = (Point) gr.getGeometry();
                ENeighbourhoodActivity.callout.setOffset(0, -10);
                ENeighbourhoodActivity.callout.show(location, EventInfoWindow.createCalloutView(
                        gr, context, userID));
            } 
            getActivity().finish();

        }
    });

在我的 createCallOutView() 中,它基本上只是显示显示事件的详细信息。但是,使用这些代码,当列表视图项目被选中时,屏幕只是冻结,过了一会儿它只是显示应用程序没有响应消息并关闭活动。

有什么想法吗?根本没有错误消息。提前致谢。

【问题讨论】:

    标签: android listview map infowindow


    【解决方案1】:

    可能是您的代码在图形部分需要更多时间。在另一个线程中插入,这样主线程就不会停止。

    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View item,
                int position, long id) {
            new Thread(new Runnable() {
            @Override
            public void run() {
              float x = Float.parseFloat(_eventlist.get(position).getEventX());
              float y = Float.parseFloat(_eventlist.get(position).getEventY());
    
              ENeighbourhoodActivity.callout.hide();
              int[] graphicIDs = ENeighbourhoodActivity.graphicsLayer.getGraphicIDs(x, y, 25);
             if (graphicIDs != null && graphicIDs.length > 0) {
                Graphic gr = ENeighbourhoodActivity.graphicsLayer.getGraphic(graphicIDs[0]);
                Point location = (Point) gr.getGeometry();
                ENeighbourhoodActivity.callout.setOffset(0, -10);
                ENeighbourhoodActivity.callout.show(location, EventInfoWindow.createCalloutView(
                        gr, context, userID));
    
             } 
             getActivity().finish();
            }
            }).start();
    
    
        }
    });
    

    当你想更新 UI 时不要忘记使用 runOnUiThread

    【讨论】:

    • 但是我得到了语法错误,错误的构造在新线程那里。那么 runOnUiThread 呢?
    • 编辑答案试试看
    • 但它没有显示当我调用 createCallOutView() 时应该存在的信息窗口。它只是关闭活动本身:(
    • 不,它不起作用。它回到了同样的问题,即屏幕只是冻结,并且在您的第二次编辑之后没有发生任何事情。
    • 有什么想法吗?因为这个 createCallOutView() 将在单击地图时被调用,并且它适用于该但不是这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    相关资源
    最近更新 更多