Я пытаюсь написать приложение, которое некоторые маркеры на Картах Google. Когда точка нажимается долго на карте, появляется диалоговое окно, в котором пользователь вводит информацию о точке. Затем эта информация будет отображаться в информационном окне маркера.Пауза до завершения работы функции
Для кода, который я написал, когда долго нажата точка, запускается showEditDialog(), и появляется диалоговое окно, но приложение не ждет ввода пользователем информации и нажмите OK перед запуском остальной части кода в OnMapLongClick. Это означает, что новые добавленные точки не имеют этой информации, потому что приложение пытается загрузить данные из SharedPreferences до его сохранения, но информация появляется, когда приложение перезагружается и все маркеры перезагружаются. Как это исправить?
Основная деятельность:
mMap.setOnMapLongClickListener(new OnMapLongClickListener() {
@Override
public void onMapLongClick(LatLng point) {
sharedPreferences = getSharedPreferences("location", 0);
int locationCount = sharedPreferences.getInt("locationCount", 0);
showEditDialog();
locationCount++;
String name = sharedPreferences.getString("name"+Integer.toString(locationCount-1), null);
String url = sharedPreferences.getString("url"+Integer.toString(locationCount-1), null);
// Drawing marker on the map
mMap.addMarker(new MarkerOptions()
.position(point)
.title(name)
.snippet(url)
);
/** Opening the editor object to write data to sharedPreferences */
SharedPreferences.Editor editor = sharedPreferences.edit();
// Storing the latitude for the i-th location
editor.putString("lat"+ Integer.toString((locationCount-1)), Double.toString(point.latitude));
// Storing the longitude for the i-th location
editor.putString("lng"+ Integer.toString((locationCount-1)), Double.toString(point.longitude));
// Storing the count of locations or marker count
editor.putInt("locationCount", locationCount);
/** Saving the values stored in the shared preferences */
editor.commit();
Toast.makeText(getBaseContext(), "New Camera Added!", Toast.LENGTH_SHORT).show();
}
});
}
private void showEditDialog() {
FragmentManager fm = getSupportFragmentManager();
AddCamDialog addCamDialog = new AddCamDialog();
addCamDialog.show(fm, "fragment_newcam");
}
@Override
public void onFinishEditDialog1(String EditText1) {
sharedPreferences = getSharedPreferences("location", 0);
int locationCount = sharedPreferences.getInt("locationCount", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("name"+ Integer.toString((locationCount-1)), EditText1);
editor.commit();
}
@Override
public void onFinishEditDialog2(String EditText2) {
sharedPreferences = getSharedPreferences("location", 0);
int locationCount = sharedPreferences.getInt("locationCount", 0);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("url"+ Integer.toString((locationCount-1)), EditText2);
editor.commit();
}
Dialog класс:
public class AddCamDialog extends DialogFragment {
public interface AddCamDialogListener {
void onFinishEditDialog1(String EditText1);
void onFinishEditDialog2(String EditText2);
}
private EditText EditText1;
private EditText EditText2;
public AddCamDialog() {
// Empty constructor required for DialogFragment
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle(R.string.title_NewCamera);
View view = getActivity().getLayoutInflater().inflate(R.layout.fragment_newcam, null);
EditText1 = (EditText) view.findViewById(R.id.cam_name);
EditText2 = (EditText) view.findViewById(R.id.cam_URL);
builder.setView(view);
builder.setPositiveButton(R.string.PositiveButton, new DialogInterface.OnClickListener() {
//@Override
public void onClick(DialogInterface dialog, int which) {
AddCamDialogListener activity = (AddCamDialogListener) getActivity();
activity.onFinishEditDialog1(EditText1.getText().toString());
activity.onFinishEditDialog2(EditText2.getText().toString());
dialog.cancel();
}
});
builder.setNegativeButton(R.string.NegativeButton, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
return builder.create();
}
}
Каков наилучший способ получить latlng точки, если я поместил код в onFinishEditDialog1/onFinishEditDialog2? Сначала я сохраняю его в SharedPreferences, а затем загружаю его оттуда? – user3106498
Это зависит от вас, если после этого вам это не понадобится, вам не нужно сохранять его в общих настройках. Кроме того, вы можете уменьшить его до одного обратного вызова с двумя параметрами ... – MByD