Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从mapActivity将数据设置为对话框片段_Android_Android Fragments_Google Maps Api 2 - Fatal编程技术网

Android 如何从mapActivity将数据设置为对话框片段

Android 如何从mapActivity将数据设置为对话框片段,android,android-fragments,google-maps-api-2,Android,Android Fragments,Google Maps Api 2,我正在获取地图上longclick事件的lat lang数据。问题是当我在对话框片段的edittext中传递数据时,它会变为null 这是我的长点击事件代码 public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, GoogleMap.OnMapClickListener, GoogleMap.OnMapLongClickListener, View.OnClickListe

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

这是我的长点击事件代码

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

这是我的工作流程,首先我打开我的对话框片段,点击fab按钮, 打开地图获取纬度和对数数据

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

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

我想在上一个对话框片段的edittext中设置字符串数据lat和logt,我不知道如何在片段中传递数据我该怎么做。请帮帮我。我非常感谢。

主活动和片段应该通过接口回调进行通信。它们通常没有可直接共享的公共内存。请参见

如果您仅使用map活动获取lat/lng,则可以这样开始

Intent intent = new Intent(this, MapsActivity.class);
startActivityForResult(intent, 1);
然后当您按下后退按钮(MapsActivity)时

再次你们的第一个活动,你们从地图上收到了位置。您可以使用对话框片段的字段。在本例中,您将丢失对话框片段实例

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

}
我认为,这种方法更适合你的情况。此外,您还可以从

编辑

我还看到了你在问题帖上的最新更新

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

}

地图屏幕是新活动吗?是,它不是启动器活动。。当我单击对话框片段的映射按钮imageYou可以尝试fragment#setArguments()。我的对话框将关闭,并且我无法在edittextYeah中存储数据,因为您丢失了对话框片段。在这种方法中,不应该出现如何在对话框edittext中存储数据的问题。。有什么解决方案吗?在onActivityResult中,你可以使用对话框片段的字段。你能告诉我为什么在onActivityResult中使用-1吗
@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); 
    }

}