2016-07-18 1 views
0

у меня есть этот код:OnCreate() не переопределен при расширении фрагмента

public class CrimeListFragment extends Fragment { 
    private RecyclerView mCrimeRecyclerView; 

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

     mCrimeRecyclerView = (RecyclerView) view 
       .findViewById(R.id.crime_recycler_view); 
     mCrimeRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

     return view; 
    } 
} 

Я знаю, что при создании фрагмента, вы отдельно реализовать onCreate() и onCreateView(). Тем не менее, onCreate(), очевидно, отсутствует здесь.

Почему?

ответ

0

Оба onCreate() и onCreateView() могут быть переопределены вами.

  • onCreate() более необязательный и вы можете использовать для создания экземпляра некоторых переменных (но вряд ли нужно переопределить его).

  • onCreateView() является обязательным, так как вы должны раздуть представление, которое хотите, и вернуть его (например, return view;).

В docs:

OnCreate()
Система называет это при создании фрагмента. В рамках вашей реализации вы должны инициализировать основные компоненты фрагмента, которые вы хотите сохранить, когда фрагмент приостановлен или остановлен, а затем возобновлен.

onCreateView()
Система вызывает это, когда пришло время, когда фрагмент впервые нарисовал свой пользовательский интерфейс. Чтобы нарисовать пользовательский интерфейс для вашего фрагмента, вы должны вернуть представление из этого метода, который является корнем макета вашего фрагмента. Вы можете вернуть значение null, если фрагмент не предоставляет пользовательский интерфейс.

Вы также можете проверить жизненный цикл фрагмента.

Как вы можете видеть на рисунке ниже, в случае возврата из заднего стека снова вызывается только onCreateView() ... Итак, вы можете использовать onCreate() для запуска кода, который может быть выполнен только один раз (при создании фрагмента. .. как настроить какой-то массив или что-то в этом роде).

Затем вы оставляете onCreateView() только для обновления/раздувания представлений перед отображением его пользователю.

Но опять же: onCreate() обычно не перегружается, и с этим нет проблем ... Всегда зависит от вас ...

:

1

вы отдельно называть OnCreate() и onCreateView()

Нет, вы не называют ни. Fragment lifecycle называет их.


onCreate не требуется, чтобы быть реализован на простой Fragment классе, только Activity классов

Что касается названия вашего вопроса - он должен быть вызван, если добавить, что фрагмент к деятельности.

+0

у меня есть эта другая деятельность, и внутри него я действительно есть метод OnCreate(), но внутри этого метода у меня есть определение переменной: otherActivity { OnCreate() { customMadeClass с = новые customMadeClass(); }} Это только потому, что переменная 'c', которая у меня есть onCreate()? – Zgodni

+0

Я не уверен, но, как я уже сказал, для Activity необходимо использовать 'onCreate' с' setContentView' ... 'inflate.inflate'' Fragment' является эквивалентом этого –

Смежные вопросы