Android: Фрагменты: альтернатива setContentView

Я пытаюсь переписать существующий проект, используя fragments, чтобы перенести свое приложение на планшет.

Я заменяю действия на fragments.

Проблема в том, что я не знаю, что эквивалентно методу setContentView? Есть ли способ создать представление Fragment's, кроме перезаписи onCreateView?


person leshka    schedule 04.08.2011    source источник


Ответы (2)


В методе onCreateView() вы можете вернуть представление вашего фрагмента следующим образом:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
  return inflater.inflate(R.layout.ads_tab, container, false); 
}
person ASH    schedule 08.08.2012
comment
Следует отметить, что это: @Override public View onCreateView (расширитель LayoutInflater, контейнер ViewGroup, Bundle saveInstanceState) { return inflater.inflate (R.layout.ads_tab, container, false); } - person kenyee; 20.07.2013

Я не уверен, почему вы не можете использовать onCreateView. Но вот что вы можете сделать.

Создайте объект LinearLayout, сохраните его как поле участника mRooLayout и верните его из onCreateView. Вот как вы можете реализовать setContentView:

void setFragmentContentView(View view)
{
    LinearLayout.LayoutParams layoutParams = 
            new LinearLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
                                          ViewGroup.LayoutParams.FILL_PARENT);
    mRootLayout.removeAllViews();
    mRootLayout.addView(view, layoutParams);
}
person inazaruk    schedule 04.08.2011
comment
Моя проблема в том, что я загружаю представление асинхронно. Поэтому, когда onCreateView вызывается фактическим представлением ОС, оно еще не готово. попробую ваш код, спасибо - person leshka; 04.08.2011
comment
Вы имеете в виду, что я могу вызвать onCreateView в любой момент? или что я должен вызвать, чтобы мой фрагмент воссоздал свой вид? - person leshka; 04.08.2011
comment
Нет, вы не можете позвонить onCreateView. Ну, вы можете, но это не будет иметь никакого эффекта и, скорее всего, все испортит в вашем фрагменте (если вы сохраните ссылки на представления в этой функции). Эта функция должна вызываться только ОС. - person inazaruk; 04.08.2011
comment
Да, я понимаю. Я имел в виду, что я должен вызвать, чтобы ОС вызвала этот метод? - person leshka; 04.08.2011
comment
Вы ничего не можете сделать. Обратный вызов жизненного цикла. Просто реорганизуйте способ обработки представлений. Вы можете использовать мой ответ в качестве отправной точки. - person inazaruk; 04.08.2011