布尔方法返回值的问题

时间:2011-08-25 12:23:55

标签: android alertdialog

我有这个功能在录制标记时显示AlertDialog:

protected boolean onTap(int index) {
        db = openHelper.getWritableDatabase();

    AlertDialog.Builder dialog = new AlertDialog.Builder(Geo.this);
    String[] columns_descri = new String[] {COL_DESCRI};
    Cursor cur = db.query(true, TABLE_COORD, columns_descri,null, null, null, null, null, null);
    if (cur.moveToPosition(index-1)) {
    String description = cur.getString(cur.getColumnIndexOrThrow(COL_DESCRI));
    dialog.setTitle("Info.");
    dialog.setMessage(description); 
    dialog.show();
    }
    db.close();
    return true;     } 

这种方法可以在地图上检索任何点按的触摸:

@Override
    public boolean onTouchEvent(MotionEvent event, MapView maMap) 
    {   
        //---when user lifts his finger---
        if (event.getAction() == 1) {                
            GeoPoint p = maMap.getProjection().fromPixels(
                (int) event.getX(),
                (int) event.getY());
                Toast.makeText(getBaseContext(), 
                    p.getLatitudeE6() / 1E6 + "," + 
                    p.getLongitudeE6() /1E6 , 
                    Toast.LENGTH_SHORT).show();
        }                            
        return true;
    }       

问题是当onTouchEvent返回TRUE时,我无法控制地图,移动它,或在录制标记时显示AlertDialog。如果它是假的,我重新控制地图,但吐司显示很多时间(5或6次)。 什么可能是这个奇怪问题的根源?

3 个答案:

答案 0 :(得分:2)

onTap和onTouch事件的布尔值表示操作是否已完全处理。如果返回true,操作系统将停止级联到其他视图(因此您失去对地图的控制权)。当您返回false时,操作系统将查找可以处理触摸事件的其他方法。

答案 1 :(得分:1)

试试这个

@Override
    public boolean onTouchEvent(MotionEvent event, MapView maMap) 
    {   
        //---when user lifts his finger---
        boolean result = false;
        if (event.getAction() == 1) {                
            GeoPoint p = maMap.getProjection().fromPixels(
                (int) event.getX(),
                (int) event.getY());
                Toast.makeText(getBaseContext(), 
                    p.getLatitudeE6() / 1E6 + "," + 
                    p.getLongitudeE6() /1E6 , 
                    Toast.LENGTH_SHORT).show();
            result true;
        }                            
        //return (result | super.onTouchEvent(event, mapView));
        return result;
    }    

答案 2 :(得分:0)

在每个触摸事件上调用OnTouchEvent。 按,拖动(许多事件),释放。 因此,你的祝酒词显示了很多。 仅在if子句内返回true,否则返回false。 那应该解决它。