扩展组时OnItemLongClick ExpandableListView崩溃

时间:2014-03-31 21:56:08

标签: android expandablelistview expandablelistadapter

我正在开发一个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;
            }
        });
    }

感谢您提供的任何帮助。

1 个答案:

答案 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,否则不会抛出此异常。只需逐步调试单击侦听器,直到找出此异常发生的确切位置和原因,然后进行修复。