如何从 mapActivity 将数据设置到对话框片段中
how to set data into dialog-fragment from mapActivity
我正在获取地图上长按事件的经纬度数据。问题是当我在对话框片段的编辑文本中传递数据时,它变得空了,
这是我的长按事件代码
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 按钮时打开我的对话框片段,
并打开地图以获取纬度和对数数据,
mow 当我点击我的 "goBackTOFragment" 按钮时,不幸的是我的应用程序停止了,
我不明白它发生了什么,即使我得到了有关 longclick 事件的数据,我也使用 toast 进行了检查,但它没有传递给片段。它在这一行上说空指针异常
fragment.latitudeEditText.setText(lat);
fragment.longitudeEditText.setText(logt);
我想在我之前的对话框片段的编辑文本中同时设置字符串数据 lat 和 logt,我不知道如何在片段中传递数据我该怎么做。请帮我。非常感谢。
Main activity 和 fragment 应该通过接口回调进行通信。它们通常没有可直接共享的公共内存。参见 http://developer.android.com/intl/es/training/basics/fragments/communicating.html
如果你用地图activity刚刚得到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();
又是您的第一个 activity,您从地图上获得了位置。你可以使用对话框片段的字段。在您的情况下,您丢失了对话框片段实例。
@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
深入查看
编辑
我还看到了您对问题 post 的最新更新。
AddGeofenceFragment.ViewHolder fragment = new AddGeofenceFragment.ViewHolder();
@Override
public void onClick(View v) {
...
fragment.latitudeEditText.setText(lat);
fragment.longitudeEditText.setText(logt);
}
这个错了,这个用法,你只是实例化,并没有调用DialogFragment的onCreateView方法。检查下面这个
首先 activity,我第一次调用 AddGeofenceFragment。还保留片段实例以备后用。
FragmentManager fm = getSupportFragmentManager();
AddGeofenceFragment dialogInstance = new AddGeofenceFragment();
AddGeofenceFragment.show(fm, "AddGeofenceFragment");
在地图 activity 中,我选择位置。
public void onMapLongClick(LatLng point) {
Intent position = new Intent();
position.putExtra("lat", point.latitude);
position.putExtra("lng", point.longitude);
setResult(1, position );
finish();
}
第一个activity,我得到了位置
@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);
}
}
我正在获取地图上长按事件的经纬度数据。问题是当我在对话框片段的编辑文本中传递数据时,它变得空了,
这是我的长按事件代码
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 按钮时打开我的对话框片段, 并打开地图以获取纬度和对数数据,
mow 当我点击我的 "goBackTOFragment" 按钮时,不幸的是我的应用程序停止了, 我不明白它发生了什么,即使我得到了有关 longclick 事件的数据,我也使用 toast 进行了检查,但它没有传递给片段。它在这一行上说空指针异常
fragment.latitudeEditText.setText(lat);
fragment.longitudeEditText.setText(logt);
我想在我之前的对话框片段的编辑文本中同时设置字符串数据 lat 和 logt,我不知道如何在片段中传递数据我该怎么做。请帮我。非常感谢。
Main activity 和 fragment 应该通过接口回调进行通信。它们通常没有可直接共享的公共内存。参见 http://developer.android.com/intl/es/training/basics/fragments/communicating.html
如果你用地图activity刚刚得到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();
又是您的第一个 activity,您从地图上获得了位置。你可以使用对话框片段的字段。在您的情况下,您丢失了对话框片段实例。
@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
深入查看编辑
我还看到了您对问题 post 的最新更新。
AddGeofenceFragment.ViewHolder fragment = new AddGeofenceFragment.ViewHolder();
@Override
public void onClick(View v) {
...
fragment.latitudeEditText.setText(lat);
fragment.longitudeEditText.setText(logt);
}
这个错了,这个用法,你只是实例化,并没有调用DialogFragment的onCreateView方法。检查下面这个
首先 activity,我第一次调用 AddGeofenceFragment。还保留片段实例以备后用。
FragmentManager fm = getSupportFragmentManager();
AddGeofenceFragment dialogInstance = new AddGeofenceFragment();
AddGeofenceFragment.show(fm, "AddGeofenceFragment");
在地图 activity 中,我选择位置。
public void onMapLongClick(LatLng point) {
Intent position = new Intent();
position.putExtra("lat", point.latitude);
position.putExtra("lng", point.longitude);
setResult(1, position );
finish();
}
第一个activity,我得到了位置
@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);
}
}