Android 组展开时,长时间单击ExpandableListView会崩溃

Android 组展开时,长时间单击ExpandableListView会崩溃,android,expandablelistview,expandablelistadapter,Android,Expandablelistview,Expandablelistadapter,我正在从事一个android项目,并使用带有自定义ExpandableListAdapter的ExpandableListView 我有一个OnItemLongClickListener。单击处理程序只应在长按组标题时使用,任何长时间单击子项的操作都应忽略 当所有组头都折叠时,代码工作正常,当任何组展开时,即使是我没有长时间单击的组,也会引发异常 stacktrace如下所示: 7452-7452/com.BoardiesITSolutions.MysqlManager E/AndroidRun

我正在从事一个android项目,并使用带有自定义ExpandableListAdapter的ExpandableListView

我有一个OnItemLongClickListener。单击处理程序只应在长按组标题时使用,任何长时间单击子项的操作都应忽略

当所有组头都折叠时,代码工作正常,当任何组展开时,即使是我没有长时间单击的组,也会引发异常

stacktrace如下所示:

7452-7452/com.BoardiesITSolutions.MysqlManager E/AndroidRuntime﹕ 致命的 例外情况:主要 java.lang.ClassCastException:java.lang.String不能强制转换为com.BoardiesITSolutions.MysqlManager.DatabaseDetails 在com.BoardiesITSolutions.MysqlManager.ConnectedDBManagerHost$1.onitellong单击ConnectedDBManagerHost.java:142 在android.widget.AbsListView.PerformLongPressAblistView.java:2854 在android.widget.AbsListView$CheckForLongPress.runAbsListView.java:2804 位于android.os.Handler.handleCallbackHandler.java:730 位于android.os.Handler.dispatchMessageHandler.java:92 在android.os.Looper.Looper.java:137 位于android.app.ActivityThread.mainActivityThread.java:5103 在java.lang.reflect.Method.invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:525 位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:737 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:553 在dalvik.system.NativeStart.mainNative方法

下面是我的代码

mDrawerDBs.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_GROUP)
            {
                for (int i = 0; i < listAdapter.getGroupCount(); i++)
                {
                    ((DatabaseDetails)parent.getItemAtPosition(i)).setIsDefaultDatabase(false);
                }
                DatabaseDetails dbDetails = (DatabaseDetails)parent.getItemAtPosition(position);
                ((DatabaseDetails) parent.getItemAtPosition(position)).setIsDefaultDatabase(true);

                ConnectionsManager.connectedDatabase.put("database", Encryption.encrypt(((DatabaseDetails) parent.getItemAtPosition(position)).getDatabaseName()));

                QueryEditor queryFragment = (QueryEditor)getSupportFragmentManager().findFragmentById(R.id.fragment_queryEditor);
                queryFragment.setDatabaseUsed();
                listAdapter.notifyDataSetChanged();
            }
            return true;
            }
        });
    }

谢谢你能提供的帮助

异常会准确地告诉您出了什么问题:

java.lang.ClassCastException: java.lang.String cannot be cast to com.BoardiesITSolutions.MysqlManager.DatabaseDetails
您试图将字符串转换为DatabaseDetails,我猜它发生在这里的某个地方:

((DatabaseDetails)parent.getItemAtPosition(i)).setIsDefaultDatabase(false);

有时getItemAtPosition返回的项必须是字符串,否则不会引发此异常。只需一步一步地调试click listener,直到您准确地找出发生此异常的位置和原因,然后修复它。

我知道问题与强制转换有关,但是,为什么这样做毫无意义。我的代码可以工作,直到其中一个组被展开,然后它就会中断。如果我长时间地压迫这个孩子,我会理解的。这个孩子只是一根绳子,但我在压迫这个群体