java - "Back button"不关闭 Activity

标签 java android android-activity back-button

我的应用程序中有两项 Activity 。

第一个是一张 map ,其中项目覆盖来自 BBDD 的结果作为地理点。如果我点击其中一点,它会显示 mostrarLugar Activity ,该 Activity 仅显示用户选择的网站的名称、描述和照片。

我有下一个问题: 如果在我的 BBDD 中,我有 10 个网站,当我看到其中一个网站时,如果我单击后退按钮,我必须单击 10 次后退按钮,因为应用程序会重新加载相同的 Activity 10 次,并且所有数据都相同。

我不知道问题出在哪里。我正在尝试用

强制结束
  public boolean onKeyDown(int keyCode, KeyEvent event)

但什么也没发生。

我认为问题可能出在onTap方法上。以下是我的 Activity :

public class Capas extends ItemizedOverlay<OverlayItem> implements OnGestureListener

    private GestureDetector gestureDetector;
    Context contexto;
    MapView Map;
    private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
    private final Activity parent;
    DataBaseHelper ayudabbdd;
    MotionEvent evento;



    public Capas(Drawable defaultMarker, Context context, Activity parent)
        {
            super(boundCenterBottom(defaultMarker));
            contexto = context;
            gestureDetector = new GestureDetector((OnGestureListener)this); 
            this.parent = parent;
            Map= (MapView) parent.findViewById(R.id.mapaTab);
            contexto = parent.getApplicationContext();

        }  

     /****
     * Evento que se inicia al tocar
     * para detectar el tipo de movimiento
     * 
     *****/
     @SuppressWarnings("static-access")
    @Override 
     public boolean onTouchEvent(MotionEvent event, MapView mapView) { 
               if(this.gestureDetector.onTouchEvent(event)) 
               { 
                   return true; }
       else{ 
           evento = event.obtain(event);
           Map = mapView;
           return super.onTouchEvent(event, mapView); 
       }
     } 

    public boolean onTap(int index) {


        return onTap(index, evento, Map);
    }

    public boolean onTap(int index,MotionEvent e, MapView map) {

        ayudabbdd = new DataBaseHelper(contexto);

        ArrayList<Object> datosLugar = ayudabbdd.getLugarPorID(index+1);
        //Paso los datos de array a las variables
        String nombre = (String) datosLugar.get(1).toString();
        muestraElPunto(nombre);
        ayudabbdd.close();

        return super.onTap(index);
    }

这就是 showMeSite Activity 。 我不认为这是错误的根源,但我也将其包含在内。

   public class mostrarLugar extends Activity{

    Context context;
    DataBaseHelper ayudabbdd;
    int id;
    String nombre;

    public void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);   
        setContentView(R.layout.mostrarlugar);

        View nombreDelLugar = (TextView)findViewById(R.id.tnombreLugar);
        View descDelLugar = (TextView) findViewById(R.id.tDescLugar);


       /********************
       * Obtengo los datos del item, con intent procedente 
       * de otro activity        
       ************************/

        String nombreClick = null;
        final Bundle extras = getIntent().getExtras();



        if(extras!=null){
            nombreClick = extras.getString("nombre");
          }

        //Conectamos a la base de datos y obtenemos el array de datos 
        ayudabbdd = new DataBaseHelper(this);
        ArrayList<Object> datosLugar = ayudabbdd.getLugarPorNombre(nombreClick);
        //Paso los datos de array a las variables
         nombre = (String) datosLugar.get(1).toString();
        String descripcion = (String) datosLugar.get(2).toString();
        String foto = (String)datosLugar.get(3).toString();
        //Los seteo
        ((TextView) nombreDelLugar).setText(nombre);
        ((TextView) descDelLugar).setText(descripcion);
        int compienzoBusquedaExtension = foto.length() - 4;
        String sFoto;//String del path real de la foto
        if(foto.indexOf(".jpg",compienzoBusquedaExtension)!=-1)
            sFoto=foto;
        else
            sFoto=obtenerPatchReal(Uri.parse(foto));
        BitmapFactory.Options options=new BitmapFactory.Options();
        options.inSampleSize = 5;
        Bitmap bitmap = BitmapFactory.decodeFile(sFoto, options);
        ImageView iLugar = (ImageView) findViewById(R.id.iDelLugar);
        iLugar.setImageBitmap(bitmap);

   }

      @Override
      public void onDestroy()
      {
          ayudabbdd.close();
          super.onDestroy();
      }
      /*
       * Si presiona atras, cerramos la aplicacion
       */
      @Override
      public boolean onKeyDown(int keyCode, KeyEvent event)
      {
          if ((keyCode == KeyEvent.KEYCODE_BACK))
          {
              finish();
          }
          return super.onKeyDown(keyCode, event);
      }

这是我在 onTap 方法中使用的 getLugarPorID 方法:

/*********************************************
         * Obtener un lugar completo a partir del ID
         * @param ID del lugar que queremos saber
         * @return Un array con los datos del lugar
         ***********************************************/
        public ArrayList<Object> getLugarPorID(int id)
        {
            CustomSQLiteOpenHelper helper = new CustomSQLiteOpenHelper(context);
            db = helper.getWritableDatabase();

            ArrayList<Object> rowArray = new ArrayList<Object>();
            Cursor cursor;

            try
            {

                cursor = db.query
                (
                        TABLE_NAME,new String[]{TABLE_ROW_ID, CNOMBRE, CDESC, CFOTO,CLAT,CLONG},TABLE_ROW_ID+"="+id,null, null, null, null, null
                );

                //movemos el puntero a la primera posicion
                cursor.moveToFirst();

                // Si hay datos los añado al array que sera devuelto
                if (!cursor.isAfterLast())
                {
                    do
                    {
                        rowArray.add(cursor.getLong(0));
                        rowArray.add(cursor.getString(1));
                        rowArray.add(cursor.getString(2));
                        rowArray.add(cursor.getString(3));
                        rowArray.add(cursor.getDouble(4));
                        rowArray.add(cursor.getDouble(5));

                    }
                    while (cursor.moveToNext());
                }

                cursor.close();
                db.close();
                return rowArray;


            }
            catch (SQLException e) 
            {
                Log.e("Error obteniendo datos de lugar", e.toString());
                e.printStackTrace();
            }
            return rowArray;

        }

最佳答案

应该是

@Override
  public boolean onKeyDown(int keyCode, KeyEvent event)
  {
      if ((keyCode == KeyEvent.KEYCODE_BACK))
      {
          finish();
      return true; // you missed this line
      }
      return super.onKeyDown(keyCode, event);
  }

关于java - "Back button"不关闭 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782431/

相关文章:

java - 尝试在 Eclipse 中创建新项目时出现 "Build path entry is missing"错误

java - 如何使用 Maven Artifact Resolver 解析 Maven 依赖并获取所有传递依赖?

java - 如何在 Linux 作为操作系统的 FAT32 分区上运行 Java?

android - 如何在聊天消息顶部显示日历日期?

java - 在 Maven 构建期间未找到外部 jar 中的类文件?

java - Facebook 登录错误 "disabled Oauth client flow"但我已启用它

android - 删除带有 header 和参数的请求 Volley

android - 我应该什么时候(在 Activity 生命周期中)保存?

Android - 多级 Activity 链的问题

java - 如何从 OpenCV 中的 Mat 对象 m 中读取每个像素的值作为 RGB 值