gpt4 book ai didi

android - 另一个 fragment 内的映射 fragment 导致 Activity 崩溃

转载 作者:行者123 更新时间:2023-11-30 00:50:50 24 4
gpt4 key购买 nike

我正在使用选项卡式 Activity ,在第一个 fragment 中我正在使用 map fragment 。它工作正常,但问题是如果我在此 Activity 中的其他 fragment 之间切换,整个 Activity 会崩溃。删除 map fragment 后,代码运行良好。但我想在 fragment 中放置一张 map ,所以请帮忙。这是我的 map fragment 的 xml 代码

     <fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="350dp"
android:layout_height="200dp"
android:layout_marginTop="20dp"
android:id="@+id/map"
android:layout_below="@+id/textView6"
android:layout_alignParentLeft="true"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_alignParentStart="true"
android:layout_marginLeft="19dp"
android:layout_marginStart="19dp"

这是每次 Activity 崩溃前的错误-

    Process: com.gjs.finalproject, PID: 5571
android.view.InflateException: Binary XML file line #30: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:767)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.inflate(LayoutInflater.java:508)
at android.view.LayoutInflater.inflate(LayoutInflater.java:418)
at com.gjs.finalproject.HomeFragment.About2Fragment.onCreateView(About2Fragment.java:64)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108)
at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1468)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:791)
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638)
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1240)
at android.support.v4.view.ViewPager.populate(ViewPager.java:1088)
at android.support.v4.view.ViewPager$3.run(ViewPager.java:275)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:775)
at android.view.Choreographer.doCallbacks(Choreographer.java:588)
at android.view.Choreographer.doFrame(Choreographer.java:557)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:761)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5276)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706)
Caused by: java.lang.IllegalArgumentException: Binary XML file line #30: Duplicate id 0x7f0e009f, tag null, or parent id 0x7f0e009d with another fragment for com.google.android.gms.maps.SupportMapFragment
at android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2422)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:177)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:729)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:810) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:508) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:418) 
at com.gjs.finalproject.HomeFragment.About2Fragment.onCreateView(About2Fragment.java:64) 
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2080) 
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1108) 
at android.support.v4.app.FragmentManagerImpl.attachFragment(FragmentManager.java:1468) 
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:791) 
at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1638) 
at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:679) 
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:143) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1240) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:1088) 
at android.support.v4.view.ViewPager$3.run(ViewPager.java:275) 
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:775) 
at android.view.Choreographer.doCallbacks(Choreographer.java:588) 
at android.view.Choreographer.doFrame(Choreographer.java:557) 
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:761) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5276) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:911) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:706) 

这是我的 fragment 代码

   @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mapFragment = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
}


@Override
public void onDestroy() {
super.onDestroy();
if (mapFragment != null) {
//mMap = null;
mapFragment=null;
}
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
//Toast.makeText(getActivity(), lat + " " + lng, Toast.LENGTH_LONG).show();

LatLng locations = new LatLng(Util.reslatitude,Util.reslogitide);

if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

return;
}
mMap.setMyLocationEnabled(true);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(locations, 13));

mMap.addMarker(new MarkerOptions()
.title("abc")

.position(locations));
}

提前致谢

最佳答案

与其在 onActivityCreated 中初始化您的 mapFragment,不如在 onCreateView 中初始化它

      @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

mapFragment = ((SupportMapFragment) getChildFragmentManager()
.findFragmentById(R.id.map));
mapFragment.getMapAsync(this);
}

你的onActivityCreated应该是

   @Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}

添加以下代码,如果有效请告诉我

   @Override
public void onPause() {
super.onPause();

getChildFragmentManager().beginTransaction()
.remove(mapFragment)
.commit();
}

关于android - 另一个 fragment 内的映射 fragment 导致 Activity 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41065077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com