android - 切换 android map fragment -- 崩溃

标签 android android-fragments android-mapview supportmapfragment mapfragment

在我的应用程序中,我有两个选项卡( map 和附近)。两个 fragment 都在使用 map fragment 。

这是我的 map.xml

<RelativeLayout
            android:id="@+id/countryLayout"
            android:layout_below="@id/partnersLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/mainFooterLayout">

        <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
            <fragment
                    android:id="@+id/map"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:name="com.google.android.gms.maps.MapFragment"/>

        </FrameLayout>

    </RelativeLayout>

这是我膨胀的代码

 View view = inflater.inflate(R.layout.map, container, false);

在 NearbyFragment 和 MyMapFragment 中我调用了

 public void onDestroyView() {
        super.onDestroyView();
        Fragment fragment = (getFragmentManager().findFragmentById(R.id.map));
        FragmentTransaction ft = mActivity.getFragmentManager().beginTransaction();
        ft.remove(fragment);
        ft.commit();
    }

但我的应用程序仍然崩溃了

我有这个异常(exception)

Caused by: java.lang.IllegalArgumentException: Binary XML file line #42: Duplicate id 0x7f0600b5, tag null, or parent id 0xffffffff with another fragment for com.google.android.gms.maps.MapFragment

谁能告诉我这里出了什么问题?

我可以使用 MapFragment 而不是 SupportMapFragment 吗?

谢谢

最佳答案

看看你应该做什么:

1) 定义 Activity 布局:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

2) 为您的列表式寻呼机创建适配器:

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

import android.app.Fragment;
import android.app.FragmentManager;
import android.content.Context;
import android.support.v13.app.FragmentPagerAdapter;

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    List<Fragment> mValues = new ArrayList<Fragment>();

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);

        // HERE YOU ADD INSTANCES OF FRAGMENTS WHAT YOU NEED
        mValues.add(new com.google.android.gms.maps.MapFragment());
        mValues.add(new com.google.android.gms.maps.MapFragment());
    }

    @Override
    public Fragment getItem(int position) {
        return PlaceholderFragment.newInstance(position + 1);
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "Map";
            case 1:
                return "Nearby";
        }
        return null;
    }
}

3) 使用标签创建主要 Activity

import android.app.ActionBar;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;
import android.support.v4.view.ViewPager;

public class MainActivity extends Activity implements ActionBar.TabListener {

    SectionsPagerAdapter mSectionsPagerAdapter;

    ViewPager mViewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

        mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());

        mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setAdapter(mSectionsPagerAdapter);

        mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    actionBar.setSelectedNavigationItem(position);
                }
            });

        for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
            actionBar.addTab(actionBar.newTab().setText(mSectionsPagerAdapter.getPageTitle(i)).setTabListener(this));
        }
    }

    @Override
    public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
        mViewPager.setCurrentItem(tab.getPosition());
    }

    @Override
    public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }

    @Override
    public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction) {
    }

}

在 Adapter 内部,你必须创建 fragmnets 的实例,你需要像标签一样放置在你的 Activity 中

附言对不起我的英语和打字错误

关于android - 切换 android map fragment -- 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23778136/

相关文章:

android - 挂接 LayoutInflater 并在 inflatedView 时更改值

android - 将 RoboSpice 与 Roboguice 结合使用

android - ScrollView 使自定义布局不可见

android - 为 fragment 制作自定义 ListView ?

android - 我的 mapView 不显示 map 只显示叠加项

android - 如何为 OkHttp3 实现自定义 DNS

java - Fragment ViewPager 中的后退按钮实现

java - 在 Android 上的 ListFragment 中使用 ArrayAdapter 获取构造函数错误

android-mapview - Android 以编程方式创建的 MapView v2 不显示

android - 将图像添加到 Android MapView