android class newinstance 构造函数 参数,Android newInstance()模式

示例

尽管可以使用参数创建片段构造函数,但Android在重新创建片段时会内部调用零参数构造函数(例如,如果由于Android自身原因而杀死它们后将其还原)。因此,建议不要依赖具有参数的构造函数。

为了确保始终存在期望的片段参数,您可以使用静态newInstance()方法创建片段,并将所需的任何参数放入创建新实例时可用的包中。

import android.os.Bundle;

import android.support.v4.app.Fragment;

public class MyFragment extends Fragment

{

// 我们从参数获取名称的标识符

private static final String NAME_ARG = "name";

private String mName;

// 需要

public MyFragment(){}

//静态构造函数。这是实例化的唯一方法

// 片段自己

public static MyFragment newInstance(final String name) {

final MyFragment myFragment = new MyFragment();

// 下面的1是一种优化,它是将

//被添加到该捆绑包中。如果您知道参数数量,则将添加

//到捆绑销售商品时,它将停止对备用映射的其他分配。如果

// 不确定,您可以构建不带任何参数的Bundle

final Bundle args = new Bundle(1);

//这会将参数存储为捆绑软件中的参数。请注意,即使

// 'name'参数为NULL则可以使用,因此您应该考虑

// 在这一点上,如果参数是强制性的,则检查NULL和

// 如果是,则抛出适当的错误

args.putString(NAME_ARG, name);

myFragment.setArguments(args);

return myFragment;

}

@Override

public void onCreate(final Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

final Bundle arguments = getArguments();

if (arguments == null || !arguments.containsKey(NAME_ARG)) {

// 根据需要设置默认值或错误

} else {

mName = arguments.getString(NAME_ARG);

}

}

}

现在,在活动中:

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();

MyFragment mFragment = MyFragment.newInstance("my name");

ft.replace(R.id.placeholder, mFragment);

//R.id.placeholder是我们要加载片段的位置

ft.commit();

这种模式是确保在创建时将所有需要的参数传递给片段的最佳实践。请注意,当系统销毁片段并在以后重新创建它时,它将自动恢复其状态-但您必须为其提供onSaveInstanceState(Bundle)实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值