Fragment构造函数和传参

本文介绍了在Android开发中,为何避免使用非默认构造函数创建Fragment,并推荐使用静态newInstance方法配合Bundle来传递参数。遵循这一最佳实践可以确保Fragment在状态恢复时正确实例化,并详细说明了如何在Fragment中获取和使用传递的参数。
摘要由CSDN通过智能技术生成

当试图重构构造函数时,比如:

<span style="font-family:SimSun;font-size:18px;">public StudyFragment(String setHint){

}</span>
会提示如下错误:

Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArguments(Bundle) instead less... (Ctrl+F1)

From the Fragment documentation:
Every fragment must have an empty constructor, so it can be instantiated when restoring its activity's state. It is strongly recommended that subclasses do not have other constructors with parameters, since these constructors will not be called when the fragment is re-instantiated; instead, arguments can be supplied by the caller with setArguments(Bundle) and later retrieved by the Fragment with getArguments().

推荐的方法是将要传入的参数置于Bundle中,通过getArguments()传入Bundle,比如:

<span style="font-family:SimSun;">public static StudyFragment newInstance(String setHint){
        StudyFragment studyFragment = new StudyFragment();
        Bundle bundle = new Bundle();
        bundle.putString("TAG", setHint);
        studyFragment.setArguments(bundle);
        return studyFragment;
}</span>


在Fragment的onCreate()或者onCreateView()等方法中通过Bundle使用传入的参数:

Bundle bundle = getArguments();
if(bundle != null){
    editText.setHint(bundle.getString(mTAG));
}


需要注意的是newInstance需要是static,否则在如下调用时会报错:

<span style="font-family:SimSun;">StudyFragment studyFragment = StudyFragment.newInstance("hello");</span>


错误提示:Non-static method 'newInstance(java.lang.String)' cannot be referenced from a static context
     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值