[英]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.