我正在开发一个Android项目,并使用带有自定义ExpandableListAdapter的ExpandableListView。
我有一个OnItemLongClickListener点击处理程序只应在长按组标题时使用,应忽略对子项的任何长按。
当折叠了所有组标题时,代码工作正常,当任何组展开时,即使我没有长时间点击,也会引发异常。
堆栈跟踪如下:
7452-7452 / com.BoardiesITSolutions.MysqlManager E / AndroidRuntime:FATAL 例外:主要 java.lang.ClassCastException:java.lang.String无法强制转换为com.BoardiesITSolutions.MysqlManager.DatabaseDetails at com.BoardiesITSolutions.MysqlManager.ConnectedDBManagerHost $ 1.onItemLongClick(ConnectedDBManagerHost.java:142) 在android.widget.AbsListView.performLongPress(AbsListView.java:2854) 在android.widget.AbsListView $ CheckForLongPress.run(AbsListView.java:2804) 在android.os.Handler.handleCallback(Handler.java:730) 在android.os.Handler.dispatchMessage(Handler.java:92) 在android.os.Looper.loop(Looper.java:137) 在android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) 在java.lang.reflect.Method.invoke(Method.java:525) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:737) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在dalvik.system.NativeStart.main(本地方法)
以下是我的代码
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;
}
});
}
感谢您提供的任何帮助。
答案 0 :(得分:0)
该例外确切地告诉您错误:
java.lang.ClassCastException: java.lang.String cannot be cast to com.BoardiesITSolutions.MysqlManager.DatabaseDetails
您正在尝试将一个String转换为DatabaseDetails,我猜它会发生在这里:
((DatabaseDetails)parent.getItemAtPosition(i)).setIsDefaultDatabase(false);
有时getItemAtPosition()
返回的项必须是String,否则不会抛出此异常。只需逐步调试单击侦听器,直到找出此异常发生的确切位置和原因,然后进行修复。