表情符号键盘崩溃
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);
我是一个相当新的开发者,所以请放轻松。
我正在制作一个聊天应用程序,并且我计划添加对自定义表情符号的支持,类似于 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);