簡體   English   中英

如何從Google Map v2的視圖中獲取片段

[英]How to get fragment from the view for Google Map v2

我有使用Google Map API v1 key android應用程序,並且運行良好。 現在,我需要將代碼提供給教授,並在新的台式機上從頭開始向他展示工作示例。 因此,現在我不能再使用Google Map API v1 key ,這就是我需要對Google Map API key v1的代碼進行一些更改以便可以與Google Map API v2 key

我試圖top half of the android screen顯示google map,而in my bottom half, I am trying to show the list view

以下是與Google Map API v1 key配合良好的代碼,現在我需要在以下代碼中進行更改以使其與Google Map API v2 key這意味着我需要在android屏幕的上半部分顯示Google Map。

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

這是我應該修改的方法。 如何修改以下方法,使其可與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);

}

如果您在上面的initViewMembers method看到我正在使用app2視圖獲取mapView id,然后在其他地方使用它。 如果要使用Google Map API v2 key則需要使用我已注釋掉的下一行中提到的MapFragment 現在,我想知道如果我使用的是Google Map API key v2如何從app2 view獲取map id

所以我的問題是如何從視圖中獲取MapFragment東西?

以下是我的horz_scroll_app xml file ,其中包含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>

我無法在上面的initViewMembers方法中執行類似的操作-

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

我正在尋找類似的東西。

在您的xml中添加

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

這是獲取對象引用的方法

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

1)您需要將google-play-services_lib導入您的工作區。 2)添加android-support-v4.jar 3)在開發人員控制台中激活android google maps v2並獲取api密鑰。 4)添加以下權限以顯示

<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" />
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" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM