ভিউপ্যাজারটি ব্যবহার করে কীভাবে গুগল ম্যাপস ভি 2 রাখবেন gment


138

আমি প্লে স্টোরে একই ট্যাব বিন্যাসটি করার চেষ্টা করছি। আমি অ্যান্ড্রয়েড থেকে একটি টুকরা এবং ভিউপেজার ব্যবহার করে ট্যাব বিন্যাসটি প্রদর্শন করতে পেরেছি তবে, আমি এটিতে গুগল ম্যাপস ভি 2 বাস্তবায়ন করতে পারি না । আমি ইতিমধ্যে কয়েক ঘন্টা ধরে ইন্টারনেট অনুসন্ধান করেছি, তবে কীভাবে এটি করা যায় তার কোনও টিউটোরিয়াল আমি পাই না। কেউ দয়া করে আমাকে কীভাবে দেখাতে পারেন?


3
এটা মজার বিষয় যে 3 বছর আগে আমি যে প্রশ্নটি জিজ্ঞাসা করেছি আমাকে ফিরে যেতে হবে যাতে এটি কীভাবে প্রয়োগ করা যায় তা আমি মনে রাখতে পারি।
Jeongbebs

সেখানে এই বাস্তবায়নের মধ্যে অনেক পার্থক্য নয় Activityএবং Fragmentএকবার getChildFragmentManager()ব্যবহার করা হয়েছে।
NecipAllef

উত্তর:


320

এই কোডটি ব্যবহার করে আমরা মানচিত্রটি যে কোনও জায়গায়, যে কোনও ভিউপাগার বা খণ্ড বা ক্রিয়াকলাপের মধ্যে সেটআপ করতে পারি।

গুগলের জন্য মানচিত্রের সর্বশেষ আপডেটে কেবলমাত্র মানচিত্রটি খণ্ডগুলির জন্য সমর্থিত। ম্যাপফ্র্যাগমেন্ট এবং সাপোর্টম্যাপফ্র্যাগমেন্ট কাজ করে না। আমি ভুল হতে পারি তবে এটি আমি ম্যাপফ্র্যাগমেন্ট এবং সাপোর্টম্যাপফ্র্যাগমেন্টটি প্রয়োগ করার চেষ্টা করার পরে দেখেছি।

ফাইলটিতে মানচিত্র দেখানোর জন্য বিন্যাসটি সেট আপ করা হচ্ছে location_fragment.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

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

</RelativeLayout>

এখন, ফাইলটিতে মানচিত্রটি দেখানোর জন্য আমরা জাভা ক্লাসটি কোড করি MapViewFragment.java:

public class MapViewFragment extends Fragment {

    MapView mMapView;
    private GoogleMap googleMap;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.location_fragment, container, false);

        mMapView = (MapView) rootView.findViewById(R.id.mapView);
        mMapView.onCreate(savedInstanceState);

        mMapView.onResume(); // needed to get the map to display immediately

        try {
            MapsInitializer.initialize(getActivity().getApplicationContext());
        } catch (Exception e) {
            e.printStackTrace();
        }

        mMapView.getMapAsync(new OnMapReadyCallback() {
            @Override
            public void onMapReady(GoogleMap mMap) {
                googleMap = mMap;

                // For showing a move to my location button
                googleMap.setMyLocationEnabled(true);

                // For dropping a marker at a point on the Map
                LatLng sydney = new LatLng(-34, 151);
                googleMap.addMarker(new MarkerOptions().position(sydney).title("Marker Title").snippet("Marker Description"));

                // For zooming automatically to the location of the marker
                CameraPosition cameraPosition = new CameraPosition.Builder().target(sydney).zoom(12).build();
                googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
            }
        });

        return rootView;
    }

    @Override
    public void onResume() {
        super.onResume();
        mMapView.onResume();
    }

    @Override
    public void onPause() {
        super.onPause();
        mMapView.onPause();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        mMapView.onDestroy();
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        mMapView.onLowMemory();
    }
}

অবশেষে গুগল ক্লাউড কনসোলে আপনার অ্যাপ্লিকেশনটি নিবন্ধভুক্ত করে আপনার অ্যাপ্লিকেশনটির জন্য API কীটি নেওয়া দরকার । নেটিভ অ্যান্ড্রয়েড অ্যাপ হিসাবে আপনার অ্যাপ্লিকেশনটি নিবন্ধ করুন।


2
<uses-library android:name="com.google.android.maps" android:required="true" />মানচিত্র ভি 1 এর জন্য, মানচিত্র ভি 2 নয়। ভবিষ্যতে এমন ডিভাইস থাকবে যাতে com.google.android.mapsফার্মওয়্যার লাইব্রেরি নেই তবে মানচিত্র ভি 2 মানচিত্র প্রদর্শন করতে পুরোপুরি সক্ষম। আপনার ম্যানিফেস্টে এই লাইনটি থাকা আপনাকে এই জাতীয় ডিভাইসগুলিতে চলমান থেকে বাধা দেবে এবং মানচিত্র ভি 2 ব্যবহারের জন্য এই লাইনটির প্রয়োজন নেই। উদাহরণস্বরূপ, github.com/commonsguy/cw-omnibus/tree/master/MapsV2 এ 17 টি প্রকল্পের এই <uses-library>উপাদান নেই এবং সূক্ষ্মভাবে কাজ করে।
কমন্সওয়্যার

7
আমি এই পদ্ধতিটি ব্যবহার করার সময় ত্রুটি পাচ্ছি। (মেফ্রেগমেন্ট.জভা: )২) কোডটি এখানে রয়েছে: গুগলম্যাপ = ((সাপোর্টম্যাপফ্র্যাগমেন্ট) মেইনঅ্যাক্টিভিটি.ফ্র্যাগমেন্টম্যানেজার .ফাইন্ডফ্রেগমেন্টবিআইআইডি (আর.আইডি.ম্যাপ)) গেটম্যাপ ();
ইমরান আহমেদ

7
আমি এমএমএপি = ((সাপোর্টম্যাপফ্র্যাগমেন্ট) মেইনএকটিভিটি.ফ্র্যাগমেন্টম্যানেজার .ফাইন্ডফ্রেগমেন্টবিআইআইডি (আর। আইডলোকেশন_ম্যাপ)) এর একটি ভুল "নুলপয়েন্টারএক্সসেপশন" পেয়েছি; গেটম্যাপ ();
aletede91

4
উদাহরণ কোড টুকরা: এমম্যাপ = ((সাপোর্টম্যাপফ্র্যাগমেন্ট) মেইনঅ্যাক্টিভিটি.ফ্র্যাগমেন্টম্যানেজার .ফাইন্ডফ্রেগমেন্টবিআইআইডি (আর। আইডলোকেশন_ম্যাপ)) গেটম্যাপ (); getFraamentById () বাতিল হলে, getMap () এ ক্রাশ হবে।
গুনার ফারসগ্রেন - মোবিমেশন

2
হ্যাঁ এটি কাজ করে না: java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
পিটার ওয়েয়ান্ড

146

নিম্নলিখিত পদ্ধতির আমার জন্য কাজ করে।

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

import com.google.android.gms.maps.CameraUpdateFactory;
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.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

/**
 * A fragment that launches other parts of the demo application.
 */
public class MapFragment extends Fragment {

MapView mMapView;
private GoogleMap googleMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // inflat and return the layout
    View v = inflater.inflate(R.layout.fragment_location_info, container,
            false);
    mMapView = (MapView) v.findViewById(R.id.mapView);
    mMapView.onCreate(savedInstanceState);

    mMapView.onResume();// needed to get the map to display immediately

    try {
        MapsInitializer.initialize(getActivity().getApplicationContext());
    } catch (Exception e) {
        e.printStackTrace();
    }

    googleMap = mMapView.getMap();
    // latitude and longitude
    double latitude = 17.385044;
    double longitude = 78.486671;

    // create marker
    MarkerOptions marker = new MarkerOptions().position(
            new LatLng(latitude, longitude)).title("Hello Maps");

    // Changing marker icon
    marker.icon(BitmapDescriptorFactory
            .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));

    // adding marker
    googleMap.addMarker(marker);
    CameraPosition cameraPosition = new CameraPosition.Builder()
            .target(new LatLng(17.385044, 78.486671)).zoom(12).build();
    googleMap.animateCamera(CameraUpdateFactory
            .newCameraPosition(cameraPosition));

    // Perform any camera updates here
    return v;
}

@Override
public void onResume() {
    super.onResume();
    mMapView.onResume();
}

@Override
public void onPause() {
    super.onPause();
    mMapView.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    mMapView.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    mMapView.onLowMemory();
}
}

fragment_location_info.xml

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.maps.MapView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent" />

8
তুমি একজন প্রতিভা, তুমি আমার জীবন বাঁচিয়েছ mMapView.onResume (); // মানচিত্রটি অবিলম্বে প্রদর্শনের জন্য প্রয়োজনীয় কী ছিল
স্টিফেন

1
আমি একই ত্রুটি পেতে থাকি java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized। আমি ভেবেছিলাম চেষ্টা করে দেখুন এটি যত্ন নেবে। কেউ আমাকে সাহায্য করতে পারেন?

@ ব্র্যান্ডনইয়াং যে দুর্দান্ত মানুষ .. আমি খুব সহজেই নেভিগেশন ড্রয়ার এবং মানচিত্রের সংমিশ্রণটি সমাধান করতে সক্ষম হয়েছি ... চিয়ার্স !!
শ্রীহরি

@ ব্র্যান্ডন ইয়াং: আপনি কি জানেন যে কেন আপনাকে ম্যানুয়ালি সমস্ত লাইফসাইকেল কলব্যাকের জন্য কল করতে হবে mMapView?
খ্রিস্টান আইচিংগার

6
getMap()অবচয় করা হয়। GetMapAsync এবং onMapReadyCallback ব্যবহারের পরিবর্তে: stackoverflow.com/a/31371953/4549776
jmeinke

80

আপনি যদি GoogleMapকোনও খণ্ডে ব্যবহার করতে চান তবে আপনি এই লাইনটি ব্যবহার করতে পারেন :

<fragment
            android:id="@+id/map"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            class="com.google.android.gms.maps.SupportMapFragment" />

GoogleMap mGoogleMap = ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)).getMap();

4
তোমার উত্তরের জন্য ধন্যবাদ! অন্যান্য সমস্ত প্রতিক্রিয়া সর্বশেষ সমর্থন লাইব্রেরিগুলির সাথে কাজ করে না
কামিল নেকানোভিজ

1
একটি খণ্ডের ভিতরে একটি টুকরা একটি ভাল অনুশীলন বলছে? এটি কীভাবে অ্যাপের কার্য সম্পাদন এবং ভাল সফ্টওয়্যার ডিজাইনকে প্রভাবিত করে ??
আওলেডিসা ই

49

হ্রাসপ্রাপ্তটির getMapAsyncপরিবর্তে সর্বশেষ জিনিস ।

1. জন্য ম্যানিফেস্ট চেক

<meta-data android:name="com.google.android.geo.API_KEY" android:value="xxxxxxxxxxxxxxxxxxxxxxxxx"/>

আপনি নিজের অ্যাপ্লিকেশনটির জন্য এপিআই কী পেতে পারেন এটিতে আপনার অ্যাপ্লিকেশনটি নিবন্ধভুক্ত করে Google Cloud Console। নেটিভ অ্যান্ড্রয়েড অ্যাপ হিসাবে আপনার অ্যাপ্লিকেশনটি নিবন্ধ করুন

২. আপনার খণ্ড বিন্যাসে .xML ফ্রেমলআউট যুক্ত করুন (খণ্ড নয়):

                  <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:layout_weight="2"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:id="@+id/mapwhere" />

বা আপনি যে উচ্চতা চান

৩. আপনার খণ্ডে অনক্রিটভিউতে

    private SupportMapFragment mSupportMapFragment; 

    mSupportMapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapwhere);
    if (mSupportMapFragment == null) {
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        mSupportMapFragment = SupportMapFragment.newInstance();
        fragmentTransaction.replace(R.id.mapwhere, mSupportMapFragment).commit();
    }

    if (mSupportMapFragment != null)
    {
        mSupportMapFragment.getMapAsync(new OnMapReadyCallback() {
            @Override public void onMapReady(GoogleMap googleMap) {
                if (googleMap != null) {

                    googleMap.getUiSettings().setAllGesturesEnabled(true);

                      -> marker_latlng // MAKE THIS WHATEVER YOU WANT

                        CameraPosition cameraPosition = new CameraPosition.Builder().target(marker_latlng).zoom(15.0f).build();
                        CameraUpdate cameraUpdate = CameraUpdateFactory.newCameraPosition(cameraPosition);
                        googleMap.moveCamera(cameraUpdate);

                }

            }
        });

3
ধন্যবাদ, প্রচুর সময় সাশ্রয় করুন, এটি সর্বশেষতম লাইব্রেরি আপডেট সহ আজকের সঠিক উত্তর।
স্যাম

আমার জন্য এটি কাজ করে নি। আমি লক্ষ্য করতে এত সময় ব্যয় করেছি যে, সেখানে লেআউটটির <fragmentপরিবর্তে হওয়া উচিতFrameLayout
user3448282

আইএমও কোডটিতে একটি ছোট তবে গুরুত্বপূর্ণ ভুল রয়েছে। ফ্রেগমেন্টম্যানেজারের টুকরোটি থাকতে হবে = getChildFragmentManager (); সাপোর্টম্যাপফ্রেগমেন্ট যুক্ত করার সময় getFragmentManager এর পরিবর্তে। কোডটি এখন যেমন রয়েছে, অনক্রিটভিউ নামক সময় মানচিত্রের খণ্ডটি সর্বদা যুক্ত করা হয় (যা খারাপ, যেহেতু এটি মানচিত্রের স্থিতি রাখে না)। তদ্ব্যতীত, আমি getMapAsync শুধুমাত্র শাখায় কল করব mSupportmapFraament == কেবল একবার প্রাথমিক সেটিংস সম্পাদন করতে নাল!
ব্যবহারকারী 1299412

@ ইউজার 1299412 ম্যান, আপনি পোস্টটি সম্পাদনা করতে পারবেন এবং আমি উত্তরটি আপডেট করব। :)
OWADVL

যখন আমি পরিবর্তিত SupportMapFragmentমধ্যে MapFragmentকার্যকলাপে পরিবর্তন FrameLayoutমধ্যে fragmentলেআউট ফাইলের মধ্যে এবং পরিবর্তিত com.google.android.gms.maps.SupportMapFragmentমধ্যে com.google.android.gms.maps.MapFragmentএটা আমার জন্য কাজ করে জরিমানা। এই পরিবর্তনগুলির আগে এটি কার্যকর হয়নি। হতে পারে এটি অন্যকে সহায়তা করে ....
CodeNinja

10

আমি এখানে বিস্তারিত কি করেছি:

এখান থেকে আপনি গুগল ম্যাপ এপি কী পেতে পারেন

বিকল্প এবং সহজ উপায়

প্রথমে আপনার গুগল অ্যাকাউন্টে লগ ইন করুন এবং গুগল গ্রন্থাগারগুলি দেখুন এবং গুগল ম্যাপস অ্যান্ড্রয়েড এপিআই নির্বাচন করুন

অ্যান্ড্রয়েড স্টুডিওর ডিফল্ট মানচিত্রের ক্রিয়াকলাপে নির্ভরতা পাওয়া গেছে:

compile 'com.google.android.gms:play-services:10.0.1'

আপনার কীটি নীচের মত অ্যাপ্লিকেশন এর অধীনে অ্যান্ড্রয়েড মূল প্রকাশ ফাইলটিতে রাখুন

অ্যান্ড্রয়েডমাইনফাইস্ট.এক্সএমএলে এই পরিবর্তনগুলি করুন:

    // required permission
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />


        // google map api key put under/inside <application></application>
        // android:value="YOUR API KEY"
        <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="AIzasdfasdf645asd4f847sad5f45asdf7845" />

টুকরা কোড:

public class MainBranchFragment extends Fragment implements OnMapReadyCallback{

private GoogleMap mMap;
    public MainBranchFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view= inflater.inflate(R.layout.fragment_main_branch, container, false);
        SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.main_branch_map);
        mapFragment.getMapAsync(this);
        return view;
    }




     @Override
        public void onMapReady(GoogleMap googleMap) {
            mMap = googleMap;
            LatLng UCA = new LatLng(-34, 151);
            mMap.addMarker(new MarkerOptions().position(UCA).title("YOUR TITLE")).showInfoWindow();

            mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(UCA,17));

        }
    }

আপনার খণ্ডে এক্সএমএল:

<fragment
                android:id="@+id/main_branch_map"
                android:name="com.google.android.gms.maps.SupportMapFragment"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context="com.googlemap.googlemap.MapsActivity" />

M gMapFragment.getMapAsync` এর getMapAsync- এ একটি অমীমাংসিত রেফারেন্স রয়েছে। এটি কাজ করে না।
পিটার ওয়েয়ান্ড 25'18

আপনি ক্রিয়াকলাপ বা খণ্ডে আছেন?
dharmx

এইটা কাজ করে! তবে আমি নিশ্চিত নই যে কোনও খণ্ডের অভ্যন্তরে কোনও অংশকে কল করা ভাল অনুশীলন কিনা? দয়া করে পরামর্শ দিন
আওলেডিসা ই

5

NullPointerExceptionযখন আমরা একটিতে ট্যাবগুলি পরিবর্তন করি তখন একটি পাওয়ার সমস্যাটির FragmentTabHostজন্য আপনার ক্লাসে এই কোডটি যুক্ত করা দরকার যা রয়েছে TabHost। আমি ক্লাসটি বোঝাতে চাইছি যেখানে আপনি ট্যাবগুলি আরম্ভ করবেন। এই কোড:

/**** Fix for error : Activity has been destroyed, when using Nested tabs 
 * We are actually detaching this tab fragment from the `ChildFragmentManager`
 * so that when this inner tab is viewed back then the fragment is attached again****/

import java.lang.reflect.Field;

@Override
public void onDetach() {
    super.onDetach();
    try {
        Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);
    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}

"ফিল্ড" টাইপটিতে আমার কী আমদানি করা উচিত? অনেক সম্ভাবনা আছে।
জিওংবেস

আমি আপনাকে আমার প্রকল্প পাঠাতে হবে? এবং তারপরে সম্ভবত আমাকে কি করতে হবে বলুন?
জিওংবিবস 14:51

আপনার ইমেল প্রজেক্ট প্রেরণ।
জিওংবেস

ইয়ো আপনার প্রকল্পের যুক্ত করেন নি গুগল প্লে-service.jar & এছাড়াও আপনি "টার্গেট = অ্যান্ড্রয়েড-18" "টার্গেট = গুগল Inc.:Google API গুলি: 18" থেকে project.properties পরিবর্তন করতে হবে
arshu

1
এই বাগটি অ্যান্ড্রয়েড ওপেন সোর্স ইস্যু ট্র্যাকারে ট্র্যাক করা হচ্ছে: কোড. google.com/p/android/issues/detail?id=42601
ক্রিস্টোফার জনসন

4
public class DemoFragment extends Fragment {


MapView mapView;
GoogleMap map;
LatLng CENTER = null;

public LocationManager locationManager;

double longitudeDouble;
double latitudeDouble;

String snippet;
String title;
Location location;
String myAddress;

String LocationId;
String CityName;
String imageURL;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    View view = inflater
                .inflate(R.layout.fragment_layout, container, false);

    mapView = (MapView) view.findViewById(R.id.mapView);
        mapView.onCreate(savedInstanceState);

  setMapView();


 }

 private void setMapView() {
    try {
        MapsInitializer.initialize(getActivity());

        switch (GooglePlayServicesUtil
                .isGooglePlayServicesAvailable(getActivity())) {
        case ConnectionResult.SUCCESS:
            // Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT)
            // .show();

            // Gets to GoogleMap from the MapView and does initialization
            // stuff
            if (mapView != null) {

                locationManager = ((LocationManager) getActivity()
                        .getSystemService(Context.LOCATION_SERVICE));

                Boolean localBoolean = Boolean.valueOf(locationManager
                        .isProviderEnabled("network"));

                if (localBoolean.booleanValue()) {

                    CENTER = new LatLng(latitude, longitude);

                } else {

                }
                map = mapView.getMap();
                if (map == null) {

                    Log.d("", "Map Fragment Not Found or no Map in it!!");

                }

                map.clear();
                try {
                    map.addMarker(new MarkerOptions().position(CENTER)
                            .title(CityName).snippet(""));
                } catch (Exception e) {
                    e.printStackTrace();
                }

                map.setIndoorEnabled(true);
                map.setMyLocationEnabled(true);
                map.moveCamera(CameraUpdateFactory.zoomTo(5));
                if (CENTER != null) {
                    map.animateCamera(
                            CameraUpdateFactory.newLatLng(CENTER), 1750,
                            null);
                }
                // add circle
                CircleOptions circle = new CircleOptions();
                circle.center(CENTER).fillColor(Color.BLUE).radius(10);
                map.addCircle(circle);
                map.setMapType(GoogleMap.MAP_TYPE_NORMAL);

            }
            break;
        case ConnectionResult.SERVICE_MISSING:

            break;
        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:

            break;
        default:

        }
    } catch (Exception e) {

    }

}

খণ্ড খণ্ডে_

<com.google.android.gms.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="match_parent"
                android:layout_height="160dp"                    
                android:layout_marginRight="10dp" />

অন্য কোনও খণ্ডের পিছনে মানচিত্রের টুকরোটি সরানোর কোনও উপায় আছে যেমন। মেনু খণ্ড? এটি একরকম রিফ্রেশ এবং আমার মেনু টুকরাটিকে পিছনে না রেখে পিছনে প্রেরণ করা।
সাইটলিজ

আপনি আসলে কি করতে চান?
বৈশালী সুতারিয়া

3

আপনি যখন ইয়োর মানচিত্রটি যুক্ত করবেন:

getChildFragmentManager().beginTransaction()
    .replace(R.id.menu_map_container, mapFragment, "f" + shabbatIndex).commit();

পরিবর্তে .addএবং পরিবর্তে getFragmentManager


1

আমি কেবল ম্যাপএ্যাকটিভিটি তৈরি করেছি এবং এটিকে খণ্ডিত করে তুলছি। MapActivity.java:

package com.example.ahmedsamra.mansouratourguideapp;

import android.support.v4.app.FragmentActivity;
import android.os.Bundle;

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.MarkerOptions;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_categories);//layout for container
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.container, new MapFragment())
                .commit();
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }


    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng mansoura = new LatLng(31.037933, 31.381523);
        mMap.addMarker(new MarkerOptions().position(mansoura).title("Marker in mansoura"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(mansoura));
    }
}

activity_map.xml:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.ahmedsamra.mansouratourguideapp.MapsActivity" />

MapFragment.java:-

package com.example.ahmedsamra.mansouratourguideapp;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * A simple {@link Fragment} subclass.
 */
public class MapFragment extends Fragment {


    public MapFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.activity_maps,container,false);
        return rootView;
    }

}

কি? না ..... কি?
রেজিক্সার

0

আমি একটি ওয়ার্কঅ্যারাউন্ড করেছি NullPointerExceptionযখন সালে অপসারণ টুকরা DestoryView, শুধু আপনার কোড করা onStop()না onDestoryView। এটা ঠিক কাজ করে!

@Override
public void onStop() {
    super.onStop();
    if (mMap != null) {
        MainActivity.fragmentManager.beginTransaction()
                .remove(MainActivity.fragmentManager.findFragmentById(R.id.location_map)).commit();
        mMap = null;
    }
}

0

Https://developer.android.com/about/versions/android-4.2.html# নেস্টেড ফ্রেম অনুযায়ী নেস্টেড ফ্রেমগুলির , আপনি যদি এখনও এর পরিবর্তে গুগল ম্যাপস টুকরোটি ব্যবহার করতে চান তবে getChildFraamentManager () কল করে আপনি এটি অর্জন করতে নেস্টেড টুকরা ব্যবহার করতে পারেন আপনার নিজের খণ্ডের ভিতরে দেখুন:

SupportMapFragment mapFragment = new SupportMapFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.content, mapFragment).commit();

যেখানে "বিষয়বস্তু" হ'ল আপনার খণ্ডের মূল বিন্যাস (সম্ভবত ফ্রেমলআউট)। মানচিত্রের টুকরোটি ব্যবহারের সুবিধাটি হ'ল তারপরে মানচিত্রের লাইফসাইকেলটি সিস্টেম দ্বারা স্বয়ংক্রিয়ভাবে পরিচালিত হয়।

যদিও ডকুমেন্টেশনটিতে বলা হয়েছে "আপনি যখন কোনও লেআউট <<ফ্রেগমেন্ট> অন্তর্ভুক্ত করেন আপনি কোনও বিন্যাসকে স্ফীত করতে পারবেন না N নেস্টেড টুকরা কেবল তখনই সমর্থিত হয় যখন কোনও খণ্ডে গতিশীলভাবে যুক্ত করা হয়।", আমি কোনওভাবে সফলভাবে এটি করেছি এবং এটি ভাল কাজ করেছে। আমার কোডটি এখানে:
খণ্ডের অনক্রিটভিউ () পদ্ধতিতে:

View view = inflater.inflate(R.layout.layout_maps, container, false);
SupportMapFragment mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(...);

বিন্যাসে:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

আশা করি এটা সাহায্য করবে!


0

পেজার দেখতে गतिशीलভাবে মানচিত্রের খণ্ড যুক্ত করা হচ্ছে:

আপনি যদি এপিআই স্তর 12 এর আগে কোনও অ্যাপ্লিকেশনটিকে টার্গেট করে থাকেন তবে সাপোর্টেড ম্যাপফ্র্যাগমেন্টের একটি উদাহরণ তৈরি করুন এবং এটি আপনার ভিউ পৃষ্ঠা অ্যাডাপ্টারে যুক্ত করুন।

SupportMapFragment supportMapFragment=SupportMapFragment.newInstance();
        supportMapFragment.getMapAsync(this);

এপিআই স্তর 12 বা উচ্চতর সমর্থন মানচিত্রের অবজেক্টগুলি

MapFragment mMapFragment=MapFragment.newInstance();
            mMapFragment.getMapAsync(this);

0

এটিই কোটলিন পথ:

ইন fragment_map.xmlতোমার উচিত ছিল:

<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/map"
    android:name="com.google.android.gms.maps.SupportMapFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

আপনার মধ্যে MapFragment.ktথাকা উচিত:

    private fun setupMap() {
        (childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment?)!!.getMapAsync(this)
    }

ফোন করুন setupMap()মধ্যে onCreateView

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.