无法从XML填充RelativeLayout:BottomSheet实现崩溃求助
解决自定义View Inflate崩溃问题
从你的报错日志核心信息 java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 就能直接定位问题:你的自定义View OrderbookFilterMenu 缺少了LayoutInflater加载XML时必须调用的构造方法。
当Android系统从XML布局中加载自定义View时,会自动尝试调用带有Context和AttributeSet这两个参数的构造方法,如果你的类里没有实现这个构造方法,就会抛出这个异常。
解决方案分两种情况:
情况1:你想把OrderbookFilterMenu作为自定义View嵌入XML
补全OrderbookFilterMenu的构造方法,确保它至少包含以下三个构造方法(Kotlin或Java版本任选):
Kotlin版本:
class OrderbookFilterMenu @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : RelativeLayout(context, attrs, defStyleAttr) { init { // 加载底部菜单布局到当前View LayoutInflater.from(context).inflate(R.layout.view_orderbook_bottom_menu_filter, this, true) // 初始化控件和逻辑 initViews() } private fun initViews() { // 示例:初始化确认按钮监听 val confirmBtn = findViewById<CoreFontButton>(R.id.filter_confirm_button) confirmBtn.setOnClickListener { // 这里添加按钮点击逻辑 } } }
Java版本:
public class OrderbookFilterMenu extends RelativeLayout { public OrderbookFilterMenu(Context context) { super(context); init(); } public OrderbookFilterMenu(Context context, AttributeSet attrs) { super(context, attrs); init(); } public OrderbookFilterMenu(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { LayoutInflater.from(getContext()).inflate(R.layout.view_orderbook_bottom_menu_filter, this, true); // 示例:初始化确认按钮监听 CoreFontButton confirmBtn = findViewById(R.id.filter_confirm_button); confirmBtn.setOnClickListener(v -> { // 这里添加按钮点击逻辑 }); } }
情况2:你想使用FilterBottomSheetFragment作为BottomSheet弹窗
注意到你已经写了FilterBottomSheetFragment这个BottomSheetDialogFragment,这种情况下你不应该在XML中直接引用OrderbookFilterMenu,而是通过代码动态显示这个Fragment:
在你的OrderbookFragment或OrderbookActivity中,添加显示底部弹窗的代码:
// 示例:绑定到某个按钮的点击事件 filterTriggerBtn.setOnClickListener { val bottomSheet = FilterBottomSheetFragment() bottomSheet.show(childFragmentManager, "FilterBottomSheetTag") }
同时记得移除主XML中的<...OrderbookFilterMenu>标签,避免两种实现方式冲突。
额外提醒
检查你的主XML中OrderbookFilterMenu的标签路径是否正确,确保包名和类名完全匹配,避免因为路径错误导致的加载失败。
内容的提问来源于stack exchange,提问作者Lukas Schüller
相关产品推荐
相关产品推荐

