谷歌地图碎片覆盖另一片段 [英] Google Map Fragment overlays another fragment
问题描述
此基础上的<一个href=\"http://stackoverflow.com/questions/19353255/how-to-put-google-maps-v2-on-a-fragment-using-viewpager\">$c$c这里给出我的应用程序实现了谷歌地图V2。问题是,我有得到由谷歌地图片段很短的时间后,这个叠加基于片段菜单(对不起,如果我拼错的概念)。
是否有可能使谷歌地图碎片留在菜单片段回来?
地图code:
公共类AdMapFragment扩展片段
{图形页面mMapView;
私人GoogleMap的GoogleMap的;@覆盖
公共查看onCreateView(LayoutInflater充气器,容器的ViewGroup,
捆绑savedInstanceState){
// inflat并返回布局
视图V = inflater.inflate(R.layout.activity_ad_map,集装箱,
假);
mMapView =(图形页面)v.findViewById(R.id.mapView);
mMapView.onCreate(savedInstanceState); mMapView.onResume(); //需要得到地图可以立即显示 尝试{
MapsInitializer.initialize(getActivity()getApplicationContext());
}赶上(例外五){
e.printStackTrace();
} GoogleMap的= mMapView.getMap();
//经纬度
双纬度= 17.385044;
双经度= 78.486671; //创建标记
的MarkerOptions标记=新的MarkerOptions()位置(
新的经纬度(纬度,经度))标题(你好图)。 //更改标记图标
marker.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)); //添加标记
googleMap.addMarker(标记);
CameraPosition cameraPosition =新CameraPosition.Builder()
。.TARGET(新经纬度(17.385044,78.486671))变焦(12).build();
googleMap.animateCamera(CameraUpdateFactory
.newCameraPosition(cameraPosition)); 返回伏;
}@覆盖
公共无效onResume(){
super.onResume();
mMapView.onResume();
}@覆盖
公共无效的onPause(){
super.onPause();
mMapView.onPause();
}@覆盖
公共无效的onDestroy(){
super.onDestroy();
mMapView.onDestroy();
}@覆盖
公共无效onLowMemory(){
super.onLowMemory();
mMapView.onLowMemory();
}}
我做活动,以这种方式工作 - 他们只是延长了 MenuActivity
所以只有一个菜单中心活动。活动code
公共类AdMapActivity扩展MenuActivity
{
}
MenuActivity
是指主叫类和聚合请求。菜单code
公共类MenuActivity扩展活动
{私人DrawerLayout menuLayout;
私人ListView的菜单列表;
私人ActionBarDrawerToggle menuToggle;
私人的ArrayList&LT; MenuListItem&GT;菜单项;
私人MenuListItemAdapter menuAdapter;私人的ArrayList&LT; BasicNameValuePair&GT; fragmentsMenu;
私人的ArrayList&LT;串GT; fragmentsMenuClass;
私人的ArrayList&LT;串GT; fragmentsMenuName;
私人的ArrayList&LT;整数GT; fragmentsMenuIcon;
私人的HashMap&LT;字符串,字符串&GT; fragmentsIndividual;私人无效displayView(INT位置)
{
字符串的className = fragmentsMenuClass.get(位置); 尝试
{
片段片段=(片段)的Class.forName(getPackageName()+ className.substring(0,className.length() - 8)+片段'。')的newInstance(); 如果(片段!= NULL)
{
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()取代(R.id.frame_container,片段).commit()。 menuList.setItemChecked(位置,真正的);
menuList.setSelection(位置);
menuLayout.closeDrawer(菜单列表);
}
}
赶上(例外五)
{
Log.e(错误,Log.getStackTraceString(e)条);
}
}@覆盖
公共布尔onCreateOptionsMenu(菜单菜单)
{
MenuInflater吹气= getMenuInflater();
inflater.inflate(R.menu.menu,菜单);
返回super.onCreateOptionsMenu(菜单);
}@覆盖
保护无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_menu_list); fragmentsMenuClass =新的ArrayList&LT;串GT;();
fragmentsMenuClass.add(AdListActivity);
fragmentsMenuClass.add(BlogListActivity);
fragmentsMenuClass.add(InterestListActivity);
fragmentsMenuClass.add(BrandListActivity);
fragmentsMenuClass.add(ProfileActivity);
fragmentsMenuClass.add(PaymentsActivity);
fragmentsMenuClass.add(AdMapActivity);
fragmentsMenuClass.add(ContactsActivity); fragmentsMenuName =新的ArrayList&LT;串GT;();
fragmentsMenuName.add(的getString(R.string.menu_item_ad_list));
fragmentsMenuName.add(的getString(R.string.menu_item_blog_list));
fragmentsMenuName.add(的getString(R.string.menu_item_interest_list));
fragmentsMenuName.add(的getString(R.string.menu_item_brand_list));
fragmentsMenuName.add(的getString(R.string.menu_item_profile));
fragmentsMenuName.add(的getString(R.string.menu_item_payments));
fragmentsMenuName.add(的getString(R.string.menu_item_ad_map));
fragmentsMenuName.add(的getString(R.string.menu_item_contacts)); fragmentsMenuIcon =新的ArrayList&LT;整数GT;();
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image); fragmentsMenu =新的ArrayList&LT;&GT;(); 菜单项=新的ArrayList&LT;&GT;(); 的for(int i = 0; I&LT; fragmentsMenuClass.size();我++)
{
menuItems.add(新MenuListItem(将String.valueOf(fragmentsMenuName.get(ⅰ)),(整数)fragmentsMenuIcon.get(ⅰ)));
} 菜单列表=(ListView控件)findViewById(R.id.menu_list); menuList.setOnItemClickListener(新AdapterView.OnItemClickListener()
{
@覆盖
公共无效onItemClick(适配器视图&LT;&GT;母公司,观景,INT位置,长的ID)
{
displayView(位置);
}
}); menuAdapter =新MenuListItemAdapter(getApplicationContext(),菜单项); menuList.setAdapter(menuAdapter); menuLayout =(DrawerLayout)findViewById(R.id.menu_layout); menuToggle =新ActionBarDrawerToggle(这一点,menuLayout,R.drawable.global_button_like_image,R.string.app_name,R.string.app_name)
{
公共无效onDrawerClosed(查看视图)
{
invalidateOptionsMenu();
} 公共无效onDrawerOpened(查看drawerView)
{
invalidateOptionsMenu();
}
}; menuLayout.setDrawerListener(menuToggle); 最后弦乐的className =的getClass()getSimpleName()。 如果(savedInstanceState == NULL)
{
如果(fragmentsMenuClass.contains(类名))
{
displayView(0);
}
其他
{
尝试
{
片段片段=(片段)的Class.forName(getPackageName()+ className.substring(0,className.length() - 8)+片段'。')的newInstance(); FragmentManager fragmentManager = getFragmentManager();
。fragment.getView()bringToFront();
。fragmentManager.beginTransaction()加(R.id.frame_container,片段).commit(); //更换 - &GT;加
}
赶上(例外五)
{
Log.e(错误,Log.getStackTraceString(e)条);
}
}
}
}}
菜单布局
&LT; android.support.v4.widget.DrawerLayout
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:ID =@ + ID / menu_layout
机器人:layout_width =match_parent
机器人:layout_height =match_parent&GT;&LT;的FrameLayout
机器人:ID =@ + ID / frame_container
机器人:layout_width =match_parent
机器人:layout_height =match_parent/&GT;&LT; ListView控件
机器人:ID =@ + ID / menu_list
机器人:layout_width =240dp
机器人:layout_height =match_parent
机器人:layout_gravity =开始
机器人:choiceMode =singleChoice
机器人:分=@彩色/ adListItemGray
机器人:dividerHeight =1DP
机器人:listSelector =@绘制/ menu_list_item_selector
机器人:背景=#FFF/&GT;&LT; /android.support.v4.widget.DrawerLayout>
正如我们上面所讨论的,添加
的的FrameLayout
解决了问题。
有关详细信息,请参阅 rel=\"nofollow\">
Basing on the code given here my app implements the Google Maps V2. The problem is that I have this fragment-based menu (sorry if I misspelled the concept) that gets overlayed by the Google Maps fragment after a very short time.
Is it possible to make the Google Maps fragment to stay in the back of the menu fragment?
Map code:
public class AdMapFragment 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.activity_ad_map, 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));
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();
}
}
I made activities to work this way - they are just extending the MenuActivity
so there is only one central activity for menu. Activity code
public class AdMapActivity extends MenuActivity
{
}
MenuActivity
refers to caller class and aggregates the request. Menu code
public class MenuActivity extends Activity
{
private DrawerLayout menuLayout;
private ListView menuList;
private ActionBarDrawerToggle menuToggle;
private ArrayList<MenuListItem> menuItems;
private MenuListItemAdapter menuAdapter;
private ArrayList<BasicNameValuePair> fragmentsMenu;
private ArrayList<String> fragmentsMenuClass;
private ArrayList<String> fragmentsMenuName;
private ArrayList<Integer> fragmentsMenuIcon;
private HashMap<String, String> fragmentsIndividual;
private void displayView(int position)
{
String className = fragmentsMenuClass.get(position);
try
{
Fragment fragment = (Fragment) Class.forName(getPackageName() + '.' + className.substring(0, className.length() - 8) + "Fragment").newInstance();
if (fragment != null)
{
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
menuList.setItemChecked(position, true);
menuList.setSelection(position);
menuLayout.closeDrawer(menuList);
}
}
catch (Exception e)
{
Log.e("error", Log.getStackTraceString(e));
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_list);
fragmentsMenuClass = new ArrayList<String>();
fragmentsMenuClass.add("AdListActivity");
fragmentsMenuClass.add("BlogListActivity");
fragmentsMenuClass.add("InterestListActivity");
fragmentsMenuClass.add("BrandListActivity");
fragmentsMenuClass.add("ProfileActivity");
fragmentsMenuClass.add("PaymentsActivity");
fragmentsMenuClass.add("AdMapActivity");
fragmentsMenuClass.add("ContactsActivity");
fragmentsMenuName = new ArrayList<String>();
fragmentsMenuName.add(getString(R.string.menu_item_ad_list));
fragmentsMenuName.add(getString(R.string.menu_item_blog_list));
fragmentsMenuName.add(getString(R.string.menu_item_interest_list));
fragmentsMenuName.add(getString(R.string.menu_item_brand_list));
fragmentsMenuName.add(getString(R.string.menu_item_profile));
fragmentsMenuName.add(getString(R.string.menu_item_payments));
fragmentsMenuName.add(getString(R.string.menu_item_ad_map));
fragmentsMenuName.add(getString(R.string.menu_item_contacts));
fragmentsMenuIcon = new ArrayList<Integer>();
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenuIcon.add(R.drawable.global_button_like_image);
fragmentsMenu = new ArrayList<>();
menuItems = new ArrayList<>();
for (int i = 0; i < fragmentsMenuClass.size(); i++)
{
menuItems.add(new MenuListItem(String.valueOf(fragmentsMenuName.get(i)), (Integer) fragmentsMenuIcon.get(i)));
}
menuList = (ListView) findViewById(R.id.menu_list);
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
displayView(position);
}
});
menuAdapter = new MenuListItemAdapter(getApplicationContext(), menuItems);
menuList.setAdapter(menuAdapter);
menuLayout = (DrawerLayout) findViewById(R.id.menu_layout);
menuToggle = new ActionBarDrawerToggle(this, menuLayout, R.drawable.global_button_like_image, R.string.app_name, R.string.app_name)
{
public void onDrawerClosed(View view)
{
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView)
{
invalidateOptionsMenu();
}
};
menuLayout.setDrawerListener(menuToggle);
final String className = getClass().getSimpleName();
if (savedInstanceState == null)
{
if (fragmentsMenuClass.contains(className))
{
displayView(0);
}
else
{
try
{
Fragment fragment = (Fragment) Class.forName(getPackageName() + '.' + className.substring(0, className.length() - 8) + "Fragment").newInstance();
FragmentManager fragmentManager = getFragmentManager();
fragment.getView().bringToFront();
fragmentManager.beginTransaction().add(R.id.frame_container, fragment).commit(); //replace -> add
}
catch (Exception e)
{
Log.e("error", Log.getStackTraceString(e));
}
}
}
}
}
Menu layout
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/menu_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/frame_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<ListView
android:id="@+id/menu_list"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:choiceMode="singleChoice"
android:divider="@color/adListItemGray"
android:dividerHeight="1dp"
android:listSelector="@drawable/menu_list_item_selector"
android:background="#FFF"/>
</android.support.v4.widget.DrawerLayout>
As we discussed above, add
the FrameLayout
resolved the problem.
For more details, please refer to here
这篇关于谷歌地图碎片覆盖另一片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!