【问题标题】:OnItemLongClick on ExpandableListView crashes when a group is expanded展开组时,ExpandableListView 上的 OnItemLongClick 崩溃
【发布时间】:2014-05-11 11:11:07
【问题描述】:

我正在开发一个 android 项目并使用带有自定义 ExpandableListAdapter 的 ExpandableListView。

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

当所有组标题都折叠时,代码工作正常,当任何组展开时,即使我没有长时间点击,也会导致抛出异常。

堆栈跟踪如下:

7452-7452/com.BoardiesITSolutions.MysqlManager E/AndroidRuntime:致命 例外:主要 java.lang.ClassCastException:java.lang.String 无法转换为 com.BoardiesITSolutions.MysqlManager.DatabaseDetails 在 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) 在 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(Native Method)

下面是我的代码

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;
            }
        });
    }

感谢您提供的任何帮助。

【问题讨论】:

    标签: android expandablelistview expandablelistadapter


    【解决方案1】:

    异常告诉你究竟出了什么问题:

    java.lang.ClassCastException: java.lang.String cannot be cast to com.BoardiesITSolutions.MysqlManager.DatabaseDetails
    

    您正在尝试将字符串转换为 DatabaseDetails,我猜它发生在这里的某个地方:

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

    有时getItemAtPosition() 返回的项目必须是字符串,否则不会抛出此异常。只需一步一步调试点击监听器,直到你弄清楚这个异常发生的确切位置和原因,然后修复它。

    【讨论】:

    • 我知道这个问题与演员阵容有关,但是,这没有任何意义。我的代码有效,直到其中一个组被扩展然后中断。如果我长时间按下只是一个字符串但我按下组的孩子,我会理解它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    相关资源
    最近更新 更多