谷歌地图碎片覆盖另一片段 [英] Google Map Fragment overlays another fragment

查看:141
本文介绍了谷歌地图碎片覆盖另一片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

此基础上的<一个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(BitmapDesc​​riptorFactory
            .defaultMarker(BitmapDesc​​riptorFactory.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(menu​​Adapter);    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(menu​​Toggle);    最后弦乐的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:机器人=htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆