如何将数据设置为mapActivity中的对话框片段

时间:2016-05-03 11:38:29

标签: android android-fragments google-maps-api-2

我在地图上的longclick事件中获取lat-lang数据。问题是当我在对话框片段的edittext中传递数据时,它变为空,

这是我的长按事件代码

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
        GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener, View.OnClickListener {
     @Override
        public void onMapLongClick(LatLng point) {
            if(mMap != null) {
                mMap.addMarker(new MarkerOptions().position(point).title(point.toString()));
                double latitudeNew = point.latitude;
                double longitude = point.longitude;
                mLatLongArray.add(new double[]{latitudeNew, longitude});
                isMarkerClicked = false;

                 lat = String.valueOf(latitudeNew);
                 logt = String.valueOf(longitude);

                Toast.makeText(getApplicationContext(),lat,Toast.LENGTH_SHORT).show();
            }
        }
}

我回去使用onbackpress在我的按钮点击这样。

 AddGeofenceFragment.ViewHolder fragment = new AddGeofenceFragment.ViewHolder();
@Override
    public void onClick(View v) {
       if (v.getId() == R.id.btnBackToFragment) {
           String TAG = "com.rockstar.googlemap.AddGeofenceFragment";
           onBackPressed();
          // getSupportFragmentManager().beginTransaction().replace(R.id.dialogFrgment, new AddGeofenceFragment()).addToBackStack(TAG).commit();
           fragment.latitudeEditText.setText(lat);
           fragment.longitudeEditText.setText(logt);
       }
   }

enter image description here

这是我的工作流程,首先我在fab-button点击时打开我的对话框片段, 并打开地图以获取纬度和逻辑数据,

enter image description here

当我点击我的“goBackTOFragment”按钮时,我的应用程序不幸停止, 我不明白它发生了什么,即使我得到longclick事件的数据,我检查使用吐司,但它没有传递给片段。它在这一行说空指针异常

 fragment.latitudeEditText.setText(lat);
 fragment.longitudeEditText.setText(logt); 

我想在我之前的对话框片段的edittext中设置字符串数据lat和logt,我不知道如何在片段中传递数据我该怎么做。请帮我。我真的很感激。

2 个答案:

答案 0 :(得分:1)

如果您使用地图活动只是获取lat / lng,它可以像这样启动

Intent intent = new Intent(this, MapsActivity.class);
startActivityForResult(intent, 1);

然后按下后退按钮(MapsActivity)

 Intent position = new Intent();
 position.putExtra("lat", lat);
 position.putExtra("lng", lng);
 setResult(1, position );     
 finish();

您的第一项活动,您从地图获得了位置。你可以使用对话框片段的字段。在您的情况下,您丢失了对话框片段实例。

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == 1){
        double lat =  intent.getDoubleExtra("lat", -1);
        double lng =  intent.getDoubleExtra("lng", -1);
    }

}

我认为,这种方法更适合您的情况。您也可以从here

深入查看

修改

我还在问题帖子上看到了您的最新更新。

AddGeofenceFragment.ViewHolder fragment = new AddGeofenceFragment.ViewHolder();

@Override
public void onClick(View v) {
    ...
    fragment.latitudeEditText.setText(lat);
    fragment.longitudeEditText.setText(logt);
}

这个错误,有了这个用法,你只是实例化,而不是调用DialogFragment的onCreateView方法。请查看以下内容

在第一次活动中,我第一次调用AddGeofenceFragment。还保留片段实例供以后使用。

  FragmentManager fm = getSupportFragmentManager();
  AddGeofenceFragment dialogInstance = new AddGeofenceFragment();
  AddGeofenceFragment.show(fm, "AddGeofenceFragment");

在地图活动中,我选择了位置。

 public void onMapLongClick(LatLng point) {
     Intent position = new Intent();
     position.putExtra("lat", point.latitude);
     position.putExtra("lng", point.longitude);
     setResult(1, position );     
     finish();
 }

在第一项活动中,我获得了职位

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(resultCode == 1){
        double lat =  intent.getDoubleExtra("lat", -1);
        double lng =  intent.getDoubleExtra("lng", -1);
        dialogInstance.latitudeEditText.setText(lat);
        dialogInstance.longitudeEditText.setText(lng); 
    }

}

答案 1 :(得分:0)

主要活动和片段应通过接口回调进行通信。它们通常没有直接共享的共同内存。见http://developer.android.com/intl/es/training/basics/fragments/communicating.html