{"record":{"id":"ea8a1c3d09d16d9c","repo":"yuliskov/SmartTube","slug":"you-can-t-set-adapter-to-messageslist-use-setada","errorCode":null,"errorMessage":"You can't set adapter to MessagesList. Use #setAdapter(MessagesListAdapter) instead.","messagePattern":"You can't set adapter to MessagesList\\. Use #setAdapter\\(MessagesListAdapter\\) instead\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"chatkit/src/main/java/com/stfalcon/chatkit/messages/MessagesList.java","lineNumber":56,"sourceCode":"    }\n\n    public MessagesList(Context context, @Nullable AttributeSet attrs) {\n        super(context, attrs);\n        parseStyle(context, attrs);\n    }\n\n    public MessagesList(Context context, @Nullable AttributeSet attrs, int defStyle) {\n        super(context, attrs, defStyle);\n        parseStyle(context, attrs);\n    }\n\n    /**\n     * Don't use this method for setting your adapter, otherwise exception will by thrown.\n     * Call {@link #setAdapter(MessagesListAdapter)} instead.\n     */\n    @Override\n    public void setAdapter(Adapter adapter) {\n        throw new IllegalArgumentException(\"You can't set adapter to MessagesList. Use #setAdapter(MessagesListAdapter) instead.\");\n    }\n\n    /**\n     * Sets adapter for MessagesList\n     *\n     * @param adapter   Adapter. Must extend MessagesListAdapter\n     * @param <MESSAGE> Message model class\n     */\n    public <MESSAGE extends IMessage>\n    void setAdapter(MessagesListAdapter<MESSAGE> adapter) {\n        setAdapter(adapter, true);\n    }\n\n    /**\n     * Sets adapter for MessagesList\n     *\n     * @param adapter       Adapter. Must extend MessagesListAdapter\n     * @param reverseLayout weather to use reverse layout for layout manager.","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/yuliskov/SmartTube/blob/3de8d90593e0166f012ca18cc3c7ba45bfd68ac4/chatkit/src/main/java/com/stfalcon/chatkit/messages/MessagesList.java#L38-L74","documentation":"MessagesList is a styled RecyclerView that only accepts MessagesListAdapter. The library overrides RecyclerView.setAdapter(Adapter) to throw IllegalArgumentException immediately and steer you to the typed overload setAdapter(MessagesListAdapter), which additionally enables smooth scrolling. The throw is synchronous at the call site.","triggerScenarios":"Calling messagesList.setAdapter(adapter) where adapter is typed as RecyclerView.Adapter/Adapter (raw) or is any adapter that is not a MessagesListAdapter — the same overload-resolution trap as DialogsList.","commonSituations":"Converting an existing RecyclerView screen to MessagesList while keeping the old setAdapter wiring; Kotlin code where the variable's declared type binds to the base overload; generic test harnesses injecting adapters via the base signature.","solutions":["Call the typed overload: messagesList.setAdapter(new MessagesListAdapter<>(senderId, holders))","Declare your adapter variable as MessagesListAdapter<MESSAGE>, not Adapter","Remove framework/testing code that sets a generic adapter on the list"],"exampleFix":"// before\nRecyclerView.Adapter adapter = new MyOldAdapter();\nmessagesList.setAdapter(adapter); // throws IllegalArgumentException\n\n// after\nMessagesListAdapter<IMessage> adapter = new MessagesListAdapter<>(senderId, holders);\nmessagesList.setAdapter(adapter);","handlingStrategy":"type-guard","validationCode":"if (!(adapter instanceof MessagesListAdapter)) {\n    throw new IllegalArgumentException(\"MessagesList requires a MessagesListAdapter\");\n}\nmessagesList.setAdapter((MessagesListAdapter<?>) adapter);","typeGuard":"static boolean isMessagesListAdapter(@Nullable Adapter a) {\n    return a instanceof MessagesListAdapter;\n}","tryCatchPattern":null,"preventionTips":["Keep adapter variables typed as MessagesListAdapter<MESSAGE>","Use the typed setAdapter overload exclusively in chat screens"],"tags":["android","recyclerview","chatkit","adapter","api-misuse"],"backgroundTag":"adapter-type-mismatch","analyzedSha":"3de8d90593e0166f012ca18cc3c7ba45bfd68ac4","analyzedAt":"2026-08-22T09:19:26.383Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}