How to get fragment from the view for Google Map v2

此生再无相见时 提交于 2019-12-11 01:33:59

问题


I have my android application which was using Google Map API v1 key and it was working fine. Now I need to give my code to my professor and show him the working demo from scratch on a new desktop machine. So that means, now I cannot use Google Map API v1 key anymore so that is the reason I needed to make some changes in the code that I have for Google Map API key v1 so that it can be used with Google Map API v2 key.

I am trying to show google map on top half of the android screen and in my bottom half, I am trying to show the list view.

Below is the code which works fine with Google Map API v1 key and now I need to make changes in the below code to make it work with Google Map API v2 key meaning I need to show Google Map on top half of the android screen.

private GoogleMap map;

@Override
public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

Bundle bundle = getIntent().getExtras();
user_id = bundle.getString("USERID");

LayoutInflater inflater = LayoutInflater.from(this);
scrollView = (MyHorizontalScrollView) inflater.inflate(R.layout.horz_scroll_with_list_menu, null);

setContentView(scrollView);

menu = inflater.inflate(R.layout.horz_scroll_menu, null);
app = inflater.inflate(R.layout.horz_scroll_app, null);

ViewGroup tabBar = (ViewGroup) app.findViewById(R.id.tabBar);

initViewMembers(app); // I need to modify something in this method only

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

initMyLocationOverview();
registerLocationListener();

Button button1 = (Button) menu.findViewById(R.id.button1);
Button button2 = (Button) menu.findViewById(R.id.button2);

useLastKnownLocation(locationManager);

final View[] children = new View[] { menu, app };

// Scroll to app (view[1]) when layout finished.
int scrollToViewIdx = 1;
scrollView.initViews(children, scrollToViewIdx,
    new SizeCallbackForMenu(btnSlide));
}

This is the method I am supposed to modify. How can I modify the below method so that it will work with Google Map V2

/**
 * Initialize the map with default settings
 *
 */
private void initViewMembers(View app2) {

mapView = (MapView) app2.findViewById(R.id.mapView);

//map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

listView = (ListView) app2.findViewById(R.id.mylist);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.setZoom(14);
mapView.setStreetView(true);

}

If you see in my above initViewMembers method I am using app2 view to get the mapView id and then use it in another place. If I am going to use Google Map API v2 key then I need to use MapFragment as mentioned in my next line which I have commented out. Now I am wondering how can I get the map id from the app2 view if I am using Google Map API key v2

So my question is how to get the MapFragment thing from the view?

Below is my horz_scroll_app xml file which has fragment for Google Map v2

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/app"
    android:layout_width="1dp"
    android:layout_height="1dp"
    android:layout_margin="2px"
    android:orientation="vertical"
    android:padding="2px" >

    <LinearLayout
        android:id="@+id/tabBar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <ImageView
            android:id="@+id/BtnSlide"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="0px"
            android:padding="0px"
            android:src="@drawable/button" />
    </LinearLayout>

    <!--
    <com.google.android.maps.MapView
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:apiKey="0s_fADEBtq0-j_teQ1j-yaoDAivoHHtwN81rJ-g"
        android:clickable="true"
        android:state_enabled="true" />
    -->

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


    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="0.8"
        android:orientation="horizontal" >

        <ListView
            android:id="@+id/mylist"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1" >
        </ListView>

    </LinearLayout>

</LinearLayout>

I cannot do something like this in my above initViewMembers method-

map = ((MapFragment) app2.findFragmentById(R.id.map)).getMap();

I am looking for something similar.


回答1:


Add this in your xml

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

This is how you can get the object reference

GoogleMap mMap = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();

1) you need to import google-play-services_lib to your workspace. 2) add android-support-v4.jar 3) in you developer console activate android google maps v2 and get the api key. 4) add follwing permissions to manifest

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<!--
 The following two permissions are not required to use
 Google Maps Android API v2, but are recommended.
-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<permission
    android:name="YOURPACKAGE.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<uses-permission android:name="YOURPACKAGE.permission.MAPS_RECEIVE" />



回答2:


I did like this..


public class CustomSupportMapFragment extends SupportMapFragment {

    private GoogleMap map;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup view,
            Bundle savedInstance) {
        View layout = super.onCreateView(inflater, view, savedInstance);

        FrameLayout frameLayout = new FrameLayout(getActivity());
        frameLayout.setBackgroundColor(getResources().getColor(
                android.R.color.transparent));
        ((ViewGroup) layout).addView(frameLayout, new ViewGroup.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        map=getMap();   

        return layout;
    }

    /*public static CustomSupportMapFragment newInstance(GoogleMapOptions op) {

        CustomSupportMapFragment frag = new CustomSupportMapFragment();

        return frag;
    }
*/
    public GoogleMap getMapInstance() {
        // TODO Auto-generated method stub

        return map;
    }

}


xml..


  <fragment
     android:id="@+id/map"
     android:layout_width="match_parent"
     android:layout_height="300dp"
     class="com.maps.utils.CustomSupportMapFragment" />


来源:https://stackoverflow.com/questions/16662220/how-to-get-fragment-from-the-view-for-google-map-v2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!