ojbqa
ojbqa

Reputation: 27

Emoji keyboard crashing

I'm a fairly new developer, so please go easy on me.

I'm making a chat app, and I'm planning on adding support for custom emojis, similar to how Discord manages custom emojis. However, my app is crashing once I tap on the emoji button. I want it to inflate my layout (emoji_keyboard_layout.xml) and view that in a LinearLayout in ChatActivity.

I've tried adding the view itself to the layout (yeah that didn't work in my case, but if that is the only solution possible, then I will try it again) and I've also tried modifying my onClick, modifying the actual method, but whatever I did, nothing would fix it.

My openEmojiKeyboard method:

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

My activity's onClick event:

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

The emoji keyboard functionality is not ready yet, just preparing the layout

Stack Trace

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

Crashing on lines llEmojiKeyboard.addView(emojiKey); and openEmojiKeyboard(EMOJI_STATE, GIF_STATE);

Upvotes: 0

Views: 423

Answers (1)

RedBassett
RedBassett

Reputation: 3587

The error you have indicated in the logs is telling you that the view (emojiKey) already has a parent (root) view. This is because you passed llEmojiKeyboard as a root view via the second argument in LayoutInflater.inflate(). Since this is already the root view, you don't need to call .addView() after inflating, or if the .addView() call is necessary, you can pass a boolean as a third argument to .inflate() to control whether the newly inflated view gets attached to the root ViewGroup (here is the documentation for that version of the .inflate() method):

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

Upvotes: 1

Related Questions