如何解决表情符号键盘崩溃
我是一个相当新的开发人员,所以请放轻松。
我正在制作一个聊天应用程序,并且我计划增加对自定义表情符号的支持,类似于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);
}
}
我的活动的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
)已经具有父(根)视图。这是因为您通过llEmojiKeyboard
中的第二个参数将LayoutInflater.inflate()
作为根视图传递。由于这已经是根视图,因此您无需在膨胀后调用.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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。