2016-05-03 6 views
1

私のマップ上でlongclickイベントのlat-langデータをフェッチしています。私は私のダイアログ・フラグメントののEditTextにデータを渡すときに問題があり、そのはnullを取得し、ここで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); 
     } 
    } 

enter image description here

最初私は

enter image description here

、FAB-ボタンクリック、 とGETの緯度とlogtitudeデータのためのオープン地図上の私のダイアログ・フラグメントを開いて、私のワークフローです私の "goBackTOFragment"ボタンをクリックすると私のアプリが残念なことに停止します。 私はそれが起こったことを理解していません。でも、私はトーストを使ってチェックしたlongclickイベントのデータを取得します。しかし、フラグメントに渡されません。それは私が私の前のダイアログ・フラグメントののEditTextに緯度とLOGT両方の文字列データを設定する場合は、この行にnullポインタ例外

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

に言って、私はそれを行うのですかどのようにフラグメントにデータを渡す方法を知りません。私を助けてください。私は本当にそれを感謝します。

+0

は、地図画面新しいアクティビティされた位置を取得していますか? – Blackkara

+0

はい、そのランチャーのアクティビティはありません。ダイアログのフラグメントのマップボタンイメージをクリックすると開きます。 –

+0

フラグメント#setArguments()を試すことができます。 – twlkyao

答えて

1

を参照してください、それはあなたがボタン(MapsActivity)

Intent position = new Intent(); 
position.putExtra("lat", lat); 
position.putExtra("lng", lng); 
setResult(1, position);  
finish(); 

をバック押すと、もう一度この

Intent intent = new Intent(this, MapsActivity.class); 
startActivityForResult(intent, 1); 

のように開始し、することができ最初のアクティビティ、あなたはマップから位置を得ました。 Uは、ダイアログのフラグメントのフィールドを使用できます。あなたのケースでは、あなたはダイアログフラグメントインスタンスを失います。

私はこのアプローチがあなたの場合より優れていると思います。また、あなたは私も疑問ポストにあなたの最新のアップデートを見た

here

EDITから深くチェックすることができます。

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

} 
+0

ダイアログが消えてしまい、edittextにデータを格納できないという問題があります。 –

+0

あなたはダイアログの断片を失っていたのでええ。このアプローチでは、 – Blackkara

+0

のダイアログボックスのデータをどのように保存することができませんedittext ..そこに何か解決策はありますか? –

関連する問題