2012-11-21 2 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

Согласно java doc в [link] (http://developer.android.com/reference/android/support/v4/app/Fragment.html), Fragment имеет только пустой конструктор. Итак, откуда взялись ваши супер (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

Ответ Лоуренс Чой был очень полезным, но не работает для меня, как вызов супер() не приемлют арг переменная. Это сработало для меня:

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); 
} 
Смежные вопросы