Android 组展开时,长时间单击ExpandableListView会崩溃
我正在从事一个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方法 下面是我的代码Android 组展开时,长时间单击ExpandableListView会崩溃,android,expandablelistview,expandablelistadapter,Android,Expandablelistview,Expandablelistadapter,我正在从事一个android项目,并使用带有自定义ExpandableListAdapter的ExpandableListView 我有一个OnItemLongClickListener。单击处理程序只应在长按组标题时使用,任何长时间单击子项的操作都应忽略 当所有组头都折叠时,代码工作正常,当任何组展开时,即使是我没有长时间单击的组,也会引发异常 stacktrace如下所示: 7452-7452/com.BoardiesITSolutions.MysqlManager E/AndroidRun
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,直到您准确地找出发生此异常的位置和原因,然后修复它。我知道问题与强制转换有关,但是,为什么这样做毫无意义。我的代码可以工作,直到其中一个组被展开,然后它就会中断。如果我长时间地压迫这个孩子,我会理解的。这个孩子只是一根绳子,但我在压迫这个群体