表情符号键盘崩溃

Emoji keyboard crashing

我是一个相当新的开发者,所以请放轻松。

我正在制作一个聊天应用程序,并且我计划添加对自定义表情符号的支持,类似于 Discord 管理自定义表情符号的方式。但是,一旦我点击表情符号按钮,我的应用程序就会崩溃。我想让它膨胀我的布局 (emoji_keyboard_layout.xml) 并在 ChatActivity 的 LinearLayout 中查看它。

我已经尝试将视图本身添加到布局中 (是的,这在我的情况下不起作用,但如果这是唯一可能的解决方案,那么我会再试一次) 我也试过修改我的 onClick,修改实际的方法,但无论我做什么,都无法修复它。

我的 openEmojiKeyboard 方法:

private void openEmojiKeyboard(Boolean EMOJI_STATE, Boolean GIF_STATE)
{
    View emojiKey = getLayoutInflater().inflate(R.layout.emoji_keyboard_layout, llEmojiKeyboard);

    llEmojiKeyboard.addView(emojiKey);
    llEmojiKeyboard.setVisibility(View.VISIBLE);

    hideKeyboard(etMessage);

    final LinearLayout llSelectContent = emojiKey.findViewById(R.id.llSelectContent);
    final LinearLayout llSelectToolbar = emojiKey.findViewById(R.id.llSelectToolbar);
    final LinearLayout llEmoji = emojiKey.findViewById(R.id.llEmoji);
    final LinearLayout llGif = emojiKey.findViewById(R.id.llGif);

    final LinearLayout llEmojiSelected = emojiKey.findViewById(R.id.llEmojiSelected);
    final LinearLayout llGifSelected = emojiKey.findViewById(R.id.llGifSelected);

    final TextView tvEmptyContent = emojiKey.findViewById(R.id.tvEmptyContent);
    final TextView tvEmptyContent1 = emojiKey.findViewById(R.id.tvEmptyContent1);

    if (EMOJI_STATE && !GIF_STATE) // The emoji keyboard is open, gif keyboard is closed
    {
        llEmojiSelected.setVisibility(View.VISIBLE);
        llGifSelected.setVisibility(View.GONE);

        tvEmptyContent1.setText(R.string.add_emoji);
        tvEmptyContent.setText(R.string.empty_emoji_content);
    }
    else if (GIF_STATE && !EMOJI_STATE) // The gif keyboard is open, emoji keyboard is closed
    {
        llGifSelected.setVisibility(View.VISIBLE);
        llEmojiSelected.setVisibility(View.GONE);

        tvEmptyContent1.setText(R.string.retry);
        tvEmptyContent.setText(R.string.empty_gif_content);
    }
}

我的 activity 的 onClick 事件:

case R.id.ivEmoji:
            openEmojiKeyboard(EMOJI_STATE, GIF_STATE);
            break;

表情符号键盘功能还没有准备好,正在准备布局

堆栈跟踪

java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

llEmojiKeyboard.addView(emojiKey);openEmojiKeyboard(EMOJI_STATE, GIF_STATE);

行崩溃

您在日志中指出的错误告诉您视图 (emojiKey) 已经有一个父(根)视图。这是因为您通过 LayoutInflater.inflate() 中的第二个参数将 llEmojiKeyboard 作为根视图传递。因为这已经是根视图,所以你不需要在膨胀后调用 .addView(),或者如果 .addView() 调用是必要的,你可以将布尔值作为第三个参数传递给 .inflate()控制新膨胀的视图是否附加到根 ViewGroup (here is the documentation for that version of the .inflate() method):

View emojiKey = getLayoutInflater().inflate(R.layout.emoji_keyboard_layout, llEmojiKeyboard, false);