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

时间:2017-04-05 14:57:28

标签: android android-activity

我在我的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;
        }
    });

2 个答案:

答案 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