android - 谷歌地图 fragment 覆盖另一个 fragment

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

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

是否可以让 Google Maps fragment 留在菜单 fragment 的后面?

map 代码:

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

}

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

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>

最佳答案

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

更多详情请引用here

关于android - 谷歌地图 fragment 覆盖另一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28301294/

相关文章:

javascript - 谷歌地图自动完成在模式弹出窗口中不起作用

android - 将 ActionBarSherlock 与 Google map API V2 结合使用

android - 将从 EditText 框获取的值传递到下一个屏幕中的 TextView

java - 有没有办法显示未选择的单选按钮中的文本?

android - 删除项目后 RecyclerView 不更新

php - 使用 AJAX 通过 Google map 动态绘制圆圈

javascript - 谷歌地图 : Distinguishing Enter Click Source

android - 将两个 TextView 放在包含 Google map 的 fragment 上方

android - 当多个标记显示在 android map 上时 Progressdialog 卡住

android - 什么是 mergeDrawableStates()?