1

私はGoogleマップを持っている断片があります。この断片をアラートダイアログ内に保存しようとしています。しかし、それは決して受け入れられません。アンドロイドでアラートダイアログ内でフラグメントトランザクションを実行できません

まず、ダイアログ内でv4フラグメントを許可しないようにしています。私はコンストラクタを通してそのv4のフラグメントオブジェクトを渡そうとしました。

このアクティビティにはコンストラクタが含まれていないとエラーが表示されます。どのようにイライラするのはこれです!ここで

は私のフラグメントのコードです:

package com.motowala.AfterLogin; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapView; 
import com.google.android.gms.maps.MapsInitializer; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 
import com.acs.R; 


public class MapDialogFragment extends Fragment implements OnMapReadyCallback { 

    View v; 
    MapView googleMapView; 
    GoogleMap googleMap; 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     v = inflater.inflate(R.layout.google_map_fragment, container, false); 
     return v; 
    } 

    @Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     googleMapView=(MapView)v.findViewById(R.id.google_map_view); 
     googleMapView.onCreate(null); 
     googleMapView.onResume(); 
     googleMapView.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     MapsInitializer.initialize(getActivity()); 
     this.googleMap=googleMap; 
     googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     googleMap.addMarker(new MarkerOptions().position(new LatLng(16,80))); 
    } 
} 

私は、フラグメントレイアウトに使用したコードは、この

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:name="com.acs.AlertAndProgressDialogs.GoogleMapLocationPicker" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/google_map_view" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

    </com.google.android.gms.maps.MapView> 
</FrameLayout> 

である私は警告ダイアログを使用したコードは、これは次のとおりです。

package com.acs.AlertAndProgressDialogs; 

import android.app.Dialog; 
import android.app.DialogFragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 

import com.google.android.gms.maps.MapView; 
import com.acs.AfterLogin.MapDialogFragment; 
import com.acs.R; 


public class GoogleMapLocationPicker extends DialogFragment { 

    View layout; 
    MapView mapView; 
    MapDialogFragment googleMapFragment; 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     layout = inflater.inflate(R.layout.google_map_frag_dialog, null); 
     googleMapFragment=new MapDialogFragment(); 
     FragmentManager manager=getActivity().getFragmentManager(); 
     FragmentTransaction transaction=manager.beginTransaction(); 
     transaction.replace(R.id.map_replacable_frag,googleMapFragment); 



    /* This is where I'm ending with error. It is saying it requires a fragment 
    object but it found object of type MapDialogFragment. 
    I have even tried using getChildFragmentManager() even that is also not 
    working at here.*/ 


    } 
} 

ありがとうございます...

答えて

0

さて、私はあなたのproblem..Testedへの解決策を発見し、それが働いています。ここで

コードは次のとおりです。

public class GoogleMapLocationPicker extends DialogFragment implements OnMapReadyCallback { 

    View layout; 
    MapView mapView; 
    GoogleMap googleMap; 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     LayoutInflater inflater = getActivity().getLayoutInflater(); 
     layout = inflater.inflate(R.layout.google_map_frag_dialog, null); 
     mapView = (MapView) layout.findViewById(R.id.google_map_view); 
     AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); 
     builder.setView(layout); 
     return builder.create(); 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     mapView.onCreate(null); 
     mapView.onResume(); 
     mapView.getMapAsync(this); 
    } 

    @Override 
    public void onMapReady(GoogleMap googleMap) { 
     Toast.makeText(getActivity(), "Map ready...", Toast.LENGTH_SHORT).show(); 
     MapsInitializer.initialize(getActivity()); 
     this.googleMap=googleMap; 
     googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN); 
     googleMap.addMarker(new MarkerOptions().position(new LatLng(16,80))); 
    } 
} 

このダイアログは、その中にマップを容易にしています。これが助けて欲しいと思っています:)

+0

多くの人にお付き合いいただきありがとうございました – sai

+0

ようこそ。 – bharath

1

これを実現しようとしている方法。 v4のフラグメントをダイアログフラグメントに置き換えることはできません。 まず、ダイアログの断片の中でGoogleマップを使用することはお勧めできませんが、それをそのまま使用したい場合は、カスタムダイアログの断片を表示する必要があります。ダイアログを表示し、その後

public class CustomDialogFragment extends DialogFragment { 
    /** The system calls this to get the DialogFragment's layout, regardless 
     of whether it's being displayed as a dialog or an embedded fragment. */ 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     // Inflate the layout to use as dialog or embedded fragment 
     return inflater.inflate(R.layout.yourmaplayout, container, false); 
    } 

    /** The system calls this only when creating the layout in a dialog. */ 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // The only reason you might override this method when using onCreateView() is 
     // to modify any dialog characteristics. For example, the dialog includes a 
     // title by default, but your custom layout might not need it. So here you can 
     // remove the dialog title, but you must call the superclass to get the Dialog. 
     Dialog dialog = super.onCreateDialog(savedInstanceState); 
     dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
     return dialog; 
    } 
} 

はこれを試してみてください

FragmentManager fragmentManager = getSupportFragmentManager(); 
CustomDialogFragment newFragment = new CustomDialogFragment(); 
newFragment.show(fragmentManager, "dialog"); 
+0

なぜ私はダイアログ内のGoogleマップを使用しないでください? – sai

+0

あなたがこれをしてはならない理由は難しくて速いルールがあります。それはちょうど良い練習とはみなされていません。 – sumit

関連する問題