我在我的MapsActivity中有几个标记,每当我点击其中一个标记出现时,这个alertdialog包含有关该标记的一些信息和三个按钮(取消,喜欢,转)当我点击&#34 ;像"按钮我想发送到另一个活动(Favoritos)来自该标记的值。 从json中检索标记值,如下所示:
final int position =(int)marker.getTag();
我如何发送"位置"没有意图的我的其他活动
这里是java:
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(final Marker marker) {
final int position = (int) marker.getTag();
final String latRepr = listaOportunidades.get(position).get("Coord_LAT");
final String lngRepr = listaOportunidades.get(position).get("Coord_LONG");
new AlertDialog.Builder(MapsActivity.this)
.setTitle(listaOportunidades.get(position).get("Designacao"))
.setMessage(" • Endereço: " + listaOportunidades.get(position).get("Morada") + "\n" + " • Telefone: " + listaOportunidades.get(position).get("Telefone")
+ "\n" + " • Telemóvel: " + listaOportunidades.get(position).get("Telemovel") + "\n" + " • Email: " + listaOportunidades.get(position).get("Email"))
.setIcon(R.drawable.iconmarker)
.setPositiveButton("Ir", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
new GetDirecoes().execute(latRepr, lngRepr);
mBottomSheetBehavior.setPeekHeight(250);
}
})
.setNeutralButton("Cancelar", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int which) {
// do nothing
}
})
.setNegativeButton("Like", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
int position = (int) marker.getTag();
Toast.makeText(getApplicationContext(), "Guardado nos favoritos", Toast.LENGTH_LONG).show();
}
})
.show();
return false;
}
});
答案 0 :(得分:1)
在您的活动之间创建一个界面。在MapsActivity中,创建一个界面:
public interface OnMarkerSelected() {
void onSelected(int position);
}
声明字段:
OnMarkerSelected listener;
在Dialog Like Click中执行以下操作:
if (listener != null) {
listener.onSelected(position);
}
然后转到您的其他活动并implement
您的界面OnMarkerSelected.
然后,您必须实施方法onSelected(int position)
,您可以访问该位置。
这不是一个完整的解决方案,可能还有一些缺失的东西,但它应该给你正确的想法并让你找到解决问题的正确途径。
希望它有所帮助。
答案 1 :(得分:0)
您可以使用首选项或某些数据库(如SQLite或Realm)保存收藏夹标记,但我建议在这种情况下使用首选项。这里有一个你可以实现的例子:
要访问您的偏好设置,您必须始终调用相同的字符串,因此,为了防止不良实践,请创建您需要的字符串资源:
<string name="MyPreferencesString">preferencesOfMyApp</string>
<string name="MyPreferencesMarkers">favoriteMarkers</string>
声明一个全局SharedPreferences变量:
SharedPreferences preferences;
使用onCrete
方法启动偏好设置:
preferences = getApplicationContext().getSharedPreferences(getString(R.string.MyPreferencesString), MODE_PRIVATE);
添加或修改首选项(在这种情况下,我们只保存一个int,但您可以添加更多值类型):
SharedPreferences.Editor editor=preferences.edit();
editor.putInt(getString(R.string.MyPreferencesMarkers),position);
editor.commit(); //or editor.apply();
从您的偏好中获取值:
int anotherPositionVariable = preferences.getInt(getString(R.string.MyPreferencesMarkers),0);
提示:在访问任何值之前刷新首选对象,方法与初始化相同。
有关偏好的文档: https://developer.android.com/training/basics/data-storage/shared-preferences.html