java - 在使用包含 map fragment 的 fragment 时使用 onbackpressed()

标签 java android listview android-fragments

我正在开发一个项目,其中有许多 fragment 连接到 fragment 管理器。我想在我的fragmentactivity中实现onbackpressed方法,以便我可以返回到上一个 fragment 。

onbackpressed代码如下所示:

public void onBackPressed() {

                int count = getSupportFragmentManager().getBackStackEntryCount();

                if (count == 0) {
                    super.onBackPressed();
                    //additional code
                } else {


                    getSupportFragmentManager().popBackStackImmediate();
                }

            }

问题是其中一个 fragment 中有一个 supportmapfragment。该 fragment 中有一个 ListView 。当我单击 ListView 中的某个项目时,它会将我带到另一个包含详细信息的 fragment 。当我按回键时,我会得到一个非法状态异常如下所示:

10-27 13:31:26.039: E/AndroidRuntime(15458): FATAL EXCEPTION: main
10-27 13:31:26.039: E/AndroidRuntime(15458): android.view.InflateException: Binary XML file line #8: Error inflating class fragment
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:587)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at com.igloo.fragments.ViewjobsFragment.onCreateView(ViewjobsFragment.java:123)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.BackStackRecord.popFromBackStack(BackStackRecord.java:764)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1527)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:494)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at com.igloo.marinaretail.UserMain.onBackPressed(UserMain.java:476)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.app.Activity.onKeyUp(Activity.java:1898)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.KeyEvent.dispatch(KeyEvent.java:1280)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.app.Activity.dispatchKeyEvent(Activity.java:2078)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1705)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2626)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2601)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.ViewRoot.handleMessage(ViewRoot.java:1873)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.os.Handler.dispatchMessage(Handler.java:99)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.os.Looper.loop(Looper.java:130)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.app.ActivityThread.main(ActivityThread.java:3689)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at java.lang.reflect.Method.invokeNative(Native Method)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at java.lang.reflect.Method.invoke(Method.java:507)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at dalvik.system.NativeStart.main(Native Method)
10-27 13:31:26.039: E/AndroidRuntime(15458): Caused by: java.lang.IllegalArgumentException: Binary XML file line #8: Duplicate id 0x7f06005e, tag null, or parent id 0x0 with another fragment for com.google.android.gms.maps.SupportMapFragment
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:296)
10-27 13:31:26.039: E/AndroidRuntime(15458):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:563)
10-27 13:31:26.039: E/AndroidRuntime(15458):    ... 26 more

如何防止按回键时出现上述问题。

此外,在包含 map 的 fragment 的 ondestroy 方法中,我有以下代码:

@Override
    public void onDestroy() {

        SupportMapFragment f = (SupportMapFragment) getActivity().getSupportFragmentManager().findFragmentById(R.id.map);
        if (f.isResumed()){ 
            getActivity().getSupportFragmentManager().beginTransaction().remove(f).commit();
        }

        super.onDestroy();
    }

如何解决后按问题?

有没有办法检查堆栈中的前一个 fragment 是否是包含支持图的 fragment ?

最佳答案

在包含 map 的 fragment 类中尝试以下代码:

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

当我看到你的评论时,我认为你只是初始化你的 googleMap 只是为了让它为空,你有类似以下代码的内容,

if (googleMap == null)
{

   // initialize Map
}

删除部分并初始化您的 map 。

关于java - 在使用包含 map fragment 的 fragment 时使用 onbackpressed(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26583224/

相关文章:

java - 在 Spark 中保存和读取键值对

java - ANDROID JAVA move 控制方向(以度为单位)

android - 在 ViewPager 中用另一个 Fragment 替换一个 Fragment

c# - ListView 按列排序

java - Oracle ORDS OAuth2,500 错误,来自 oracle.dbtools.common.util.Base64.base64ToByteArray 的 “String length must be a multiple of four”

java - 通过套接字发送的字符串与应有的内容不匹配

java - 我正在尝试连接到smpp服务器!我收到连接超时异常

java - Android 在 webview 中创建带有链接的 toast

android - 即使弹出对话框,Android youtube如何隐藏系统用户界面

C#:Listview LargeIcon View :消除行之间的空间