gpt4 book ai didi

java - "Back button"不关闭 Activity

转载 作者:行者123 更新时间:2023-12-01 19:09:26 26 4
gpt4 key购买 nike

我的应用程序中有两项 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com