怎么正确的创建一个带参数的Fragment?

在Android开发中经常会用到Fragment,为什么不建议直接给Fragment重载一个带参数的构造方法,然后使用带参数的构造方法来实例化Fragment?

androidfragment
1
261
小课
小课2022-06-17 21:48
1 个回答

首先要知道在某些情况下,Activity可能会重新创建你已经实例化的Fragment,在重新创建时,它会使用Fragment无参数的构造方法来进行实例化,如果之前是通过带参数的构造方法创建的Fragment,那么重新创建的Fragment就无法得到这些参数,从而导致某些状态出现错误。

如果需要在创建Fragment时传入参数,我们可以通过setArguments方法,把参数封装在Bundle中。比如说有一个ListFragment,实例化时需要传入一个参数userId,我们可以定义一个静态方法newInstance如下。

public static ListFragment newInstance(long userId) {
    ListFragment fragment = new ListFragment();
    Bundle args = new Bundle();
    args.putLong("userId", userId);
    fragment.setArguments(args);
    return fragment;
}

然后在ListFragment的onCreate方法中通过getArguments来获取传入的参数。

Bundle args = getArguments();
long userId = args.getLong("userId");

这样的好处是即使Activity重新创建Fragment时,这个Bundle仍然保留,新的Fragment实例还可以通过getArguments获取到之前传入的参数。

1
小课
小课2022-06-17 22:17
你的回答

内容