簡體   English   中英

將選擇器加載到較長位置,變量無法正確更改

[英]Place Picker loads to long, variables don't change correctly

我正在用android做一個簡單的地方選擇器程序。 當用戶使用地點選擇器在地圖上選擇一個點時,我想保存一些文本。 問題是,當我單擊按鈕時,位置選擇器打開的時間過長,導致位置變化的變量無法跟上更改,並且輸入文本的響應對話框也永遠不會打開。 我認為,也許問題出在線程上,不是嗎?

MapsActivity.java

package com.example.kirill.myapplication;

import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;


public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, View.OnClickListener {

private static final int PLACE_PICKER_REQUEST = 1;
private GoogleMap mMap;
private Button addEventBtn;
private PlacePicker.IntentBuilder builder;
private Place place;

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.AddEventButton:
            place = null;
            callPlacePicker();
            if (place != null) {
                openDialog();
            }
            break;
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    addEventBtn = (Button) findViewById(R.id.AddEventButton);
}

@Override
public void onMapReady(GoogleMap googleMap){
    mMap = googleMap;
    LatLng sydney = new LatLng(-34, 151);
    Marker marker = mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));
    mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    addEventBtn.setOnClickListener(this);
}


protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == RESULT_OK) {
            place = PlacePicker.getPlace(this, data);
        }
    }
}


public void openDialog() {
    DialogEventCreate dialogEventCreate = new DialogEventCreate();
    dialogEventCreate.show(getSupportFragmentManager(), "dialog Event Create");
}


public void callPlacePicker() {
    builder = new PlacePicker.IntentBuilder();
    try {
        startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

}

DialogEventCreate.java

package com.example.kirill.myapplication;

import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;


public class DialogEventCreate extends AppCompatDialogFragment {

private EditText editEventName;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    LayoutInflater inflater = getActivity().getLayoutInflater();
    View view = inflater.inflate(R.layout.layout_dialog, null);

    builder.setView(view)
            .setTitle("Create Event")
            .setNegativeButton("cancel", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            })
            .setPositiveButton("create", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });

    editEventName = view.findViewById(R.id.editEventName);
    return builder.create();
    }
}

請幫助我,可能會出什么問題?

您的問題是,地點選擇器與您的主要活動異步進行通信,因此您需要在對話框返回之前打開它。 嘗試等待直到位置選擇器返回,然后再打開對話框,如下所示:

.
.
.
@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.AddEventButton:
            place = null;
            callPlacePicker();
            break;
    }
}
.
.
.
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PLACE_PICKER_REQUEST) {
        if (resultCode == RESULT_OK) {
            place = PlacePicker.getPlace(this, data);
            openDialog();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM