2017-08-02 77 views
2

我发现下面的代码放在一个项目(变量/类名称更改):参数是否可以像这样传递给片段?

private FragmentParams params; 

public static MyFragment newInstance(FragmentParams params) { 
    MyFragment fragment = new MyFragment(); 
    fragment.params = params; // <- Manually setting params in fragment class 
    return fragment; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.my_fragment, container, false); 
    ButterKnife.bind(this, view); 

    /* The following line initializes a class responsible for the user 
    interface. The params are used for that purpose. However, out of 
    nowhere, the params where null 2 times.*/ 

    presenter.setParams(params); 
    return view; 
} 

该项目已住了几个星期和一对夫妇NullPointerException报道当presenter代码访问的PARAMS(进一步)。

我知道正确的方法是使用setArguments(),但我想问的问题是:可以指出的线有问题吗?

我能想到的唯一的东西,那Android的出于某种原因重新创建的片段和params成为null由于方法newInstance不会被调用,因此没有设置params

+0

不可以。你必须把它传递给'Bundle'。 – Piyush

+1

也许你是在代码的某个地方实例化类,如'Fragment()',而不是'newInstance',那里的参数是'null' –

+0

@Piyush你能读一下最后一段,告诉我你对我怀疑的看法? – JonZarate

回答

0

是的,因为当活动被重新参数值丢失可能会出现问题。你可以做的是每次通过onSaveInstanceState销毁即将销毁的活动时保存参数值。例如可以看到here

相关问题