2017-11-22 15 views
0

私はアンドロイドで簡単な場所選択プログラムを作っています。私は、場所選択ツールで地図上のポイントを選択したときにテキストを保存したい。そして問題は、私がボタンをクリックすると、場所選択ツールがあまりに長く開き、場所を担当する変数が変更を続けることができず、入力テキストに対する応答が開かれないということです。スレッドに問題があるかもしれないと思いますか?ピッカーの読み込み時間が長くなり、変数が正しく変更されない

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

間違って行くことができるもの、私を助けてください?

答えて

0

あなたの問題は、Place Pickerがメインのアクティビティと非同期で通信するため、ダイアログが開く前に開くことです。次のようにダイアログを開く前にPlace Pickerが返るまで待ってください。

. 
. 
. 
@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(); 
     } 
    } 
} 
関連する問題