无法实例化片段(找不到片段构造函数)

4

我在一些设备上遇到了这个问题,并在我的崩溃分析中得到了一个错误。 当应用程序与ANR有问题时,就会出现此问题,错误消息如下:

无法启动活动 ComponentInfo{com.qwykr.dryver.base/com.qwykr.dryver.base.activities.MainActivity}:android.support.v4.app.Fragment$InstantiationException: 无法实例化 com.qwykr.dryver.base.fragments.SlideFragment 片段:找不到片段构造函数

@Override
protected void onCreate(Bundle arg0) {
    // TODO Auto-generated method stub
    super.onCreate(arg0);
}

Slide构造函数是

  @SuppressLint("ValidFragment")
public SideMenuFragment(Context mContext) {
    this.mContext=mContext;
}

有时候ANR(应用程序无响应)会因为这个问题而出现。有时候它可以正常工作,有时候就会出现问题。


8
这个崩溃不是ANR。所有的Fragment都需要一个“public”无参数构造函数。你的崩溃提示说“SlideFragment”没有一个“public”无参数构造函数。请注意,你的代码是针对另一个类(“SideMenuFragment”)。 - CommonsWare
@CommonsWare 我已经在所有构造函数中声明了public,特别是SlideFargment有一个public构造函数。 - Mohit Lakhanpal
它需要是一个“公共的”零参数构造函数。根据崩溃,您缺少这样的构造函数。 - CommonsWare
@CommonsWare 感谢您的回复。即使我将其设置为可空,仍然显示相同的错误... - Shihas
@Shihas:完全删除构造函数。最坏的情况下,完全移除构造函数参数。 - CommonsWare
显示剩余4条评论
1个回答

1
这个例子是关于Kotlin的,但你也可以用Java实现。
abstract class BaseFragment : Fragment() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }

    override fun onDestroyView() {
        super.onDestroyView()
    }

    override fun onResume() {
        super.onResume()
    }
}

class ApproveFragment : BaseFragment() {

    companion object {
        fun newInstance(orderId: Int) = ApproveFragment().apply {
            arguments = Bundle(1).apply {
                putInt("ORDER_ID", orderId)
            }
        }
    }

    override fun onCreateView(
        inflater: LayoutInflater?,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return inflater?.inflate(R.layout.fragment_approve, container, false)
    }

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
    }
}

尝试将 Kotlin 转换为 Java,Android Studio 可以实现。请查看此帖子:https://dev59.com/qVUL5IYBdhLWcg3wFEhR - jDroidCoder Group
组工具 -> Kotlin -> 显示Kotlin字节码选项缺失,以及 工具 >> kotlin >> 显示Kotlin字节码 >> 反编译也缺失 - Mohit Lakhanpal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接