Android 将值发送到另一个活动并将其保存到listview中

Android 将值发送到另一个活动并将其保存到listview中,android,android-activity,Android,Android Activity,我的MapsActivity中有几个标记,每次单击其中一个标记时,都会显示一个alertdialog,该alertdialog包含有关该标记的一些信息和三个按钮Cancel(取消),例如,当我单击要发送给另一个活动的Like(类似)按钮时Go(转到)表示该标记的值。 标记值从json中检索,如下所示: 最终int位置=int marker.getTag 我如何在没有意图的情况下将职位发送到我的其他活动 下面是java: mMap.setOnMarkerClickListener(new Goog

我的MapsActivity中有几个标记,每次单击其中一个标记时,都会显示一个alertdialog,该alertdialog包含有关该标记的一些信息和三个按钮Cancel(取消),例如,当我单击要发送给另一个活动的Like(类似)按钮时Go(转到)表示该标记的值。 标记值从json中检索,如下所示:

最终int位置=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;
        }
    });

在活动之间创建一个接口。在MapsActivity中,创建一个界面:

public interface OnMarkerSelected() {
 void onSelected(int position);
}
声明字段:

OnMarkerSelected listener;
在类似的对话框中,单击执行以下操作:

if (listener != null) {
  listener.onSelected(position);
}
然后转到其他活动并在Markerselected上实现您的接口

然后,您必须在SelectedInt position上实现方法,在这里您将有权访问该职位

这不是一个完整的解决方案,可能还缺少一些东西,但它应该给你正确的想法,让你走上解决问题的正确道路


希望有帮助。

您可以使用首选项或某些数据库(如SQLite或Realm)保存喜爱的标记,但我建议在这种情况下使用首选项。下面是一个您可以实现的示例:

要访问您的首选项,您必须始终调用相同的字符串,因此,为了防止错误做法,请创建您需要的字符串资源:

<string name="MyPreferencesString">preferencesOfMyApp</string>
<string name="MyPreferencesMarkers">favoriteMarkers</string>
启动onCrete方法中的首选项:

在这种情况下,要添加或修改首选项,我们只保存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);
提示:在访问任何值之前刷新首选对象,方法与初始化对象的方法相同

有关首选项的文档:

    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);