2012-11-21 67 views
2

代码:如何将片段中的非默认构造函数更改为默认构造函数?

public PlacePickerFragment() { 
    this(null); 
} 
public PlacePickerFragment(Bundle args) { 
    super(GraphPlace.class, R.layout.com_facebook_placepickerfragment, args); 
    setPlacePickerSettingsFromBundle(args); 
} 

你好,我想从上面的代码中删除弃用警告,有没有办法把它改为默认构造函数?

+1

什么是警告? – Makoto

+0

哪一行有弃用警告? –

+1

根据[链接](http://developer.android.com/reference/android/support/v4/app/Fragment.html)中的java文档,片段只有一个空的构造函数。那么你的超级(GraphPlace.class,R.layout.com_facebook_placepickerfragment,args)从哪里来? –

回答

6

当您创建片段,使用setArgument():

Bundle args = new Bundle(); 
// Construct your bundle here 
Fragment mFragment = new PlacePickerFragment(); 
mFragment.setArguments(args); 
mFragment.initialize(); 

并使用片段的默认构造函数。您可能需要调用setPlacePickerSettingsFromBundle()已设置的参数,这样的事情后:

public PlacePickerFragment() { 
    super(GraphPlace.class, R.layout.com_facebook_placepickerfragment, args); 
} 

public void initialize() { 
    Bundle args = getArguments(); 
    setPlacePickerSettingsFromBundle(args); 
} 
+0

请问你的构造函数是什么“参数”? – RRTW

+0

@RRTW它是一个“Bundle”类型的对象引用 – IronBlossom

1

摆脱Bundle参数并使构造函数不带任何参数。然后使用setArguments()传递包。如有必要,创建静态工厂方法以使用必要的参数创建片段。

0

由劳伦斯·蔡的回答是非常有益的,但对我的超级()调用不接受ARGS没有工作变量。这对我有效:

public void initialize() { 
    Bundle args = getArguments(); 
    setPlacePickerSettingsFromBundle(args); 
} 

/** 
    * Default constructor. Creates a Fragment with all default properties. 
    */ 
public PlacePickerFragment() { 
    super(GraphPlace.class, R.layout.com_facebook_placepickerfragment, null); 
}