【问题标题】:Google Map Fragment overlays another fragment谷歌地图片段覆盖了另一个片段
【发布时间】:2015-02-05 00:43:53
【问题描述】:

基于code given here,我的应用实现了Google Maps V2。问题是我有这个基于片段的菜单(很抱歉,如果我拼错了这个概念),它会在很短的时间后被 Google 地图片段覆盖。

是否可以让谷歌地图片段留在菜单片段的后面?

地图代码:

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

}

我让活动以这种方式工作 - 它们只是扩展了MenuActivity,因此菜单只有一个中心活动。活动代码

public class AdMapActivity extends MenuActivity
{
}

MenuActivity 引用调用者类并聚合请求。菜单代码

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

}

菜单布局

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

【问题讨论】:

  • 您提供的代码是基本代码,能否请您提供遇到问题时的屏幕截图?
  • 片段叠加也可以参考here
  • @bjiang 抱歉,无法提供任何屏幕。添加了更多代码,也尝试实现给定的示例,将 MenuActivity 中的 'replace' 替换为 'add',没有任何结果。
  • 你可以考虑使用FrameLayout,把你的fragment放进去
  • @bjiang 请查看编辑。添加了菜单 XML。你是这样想的吗?

标签: android google-maps google-maps-android-api-2


【解决方案1】:

正如我们上面讨论的,add FrameLayout 解决了这个问题。

更多详情请参考here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多