Рефактор метода onCreateView

457
02 января 2017, 22:11

Есть фрагмент, в котором метод onCreateVew:

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
    initializeData();
    initializeAdapter();
    return view;
}

Хочу вынести реализацию recyclerView отдельно в дополнительный метод и просто объявить его в onCreateView:

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);
    initViews();
    initializeData();
    initializeAdapter();
    return view;
}
private initViews() {
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
}

но ругается на view.findViewById. Мол надо объявить. Подскажите как лучше сделать.

Answer 1

Вы обращаетесь к необъявленной переменной. Переменная, объявленная в к-л методе не видна за пределами этого метода. Выхода 2

  1. Неправильный в данном случае - вынести переменную View view на уровень класса. Так она будет доступна во всех методах и внутренних классах класса. В данном случчае это не нужно и принесёт больше проблем, чем пользы.

  2. Правильный способ - передать View view из метода onCreateView в метод initViews через аргументы последнего так:

private initViews(View view) {
    recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
    layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setHasFixedSize(true);
}

Вызывать теперь метод так:

initViews(view);
READ ALSO
Помощь в написании запроса Facebook Graph API

Помощь в написании запроса Facebook Graph API

Пытаюсь разобраться в запросах Graph api FacebookНашел запрос (в одной из тем):

497
(android)Как внести изменения в библиотеку (ресурсы) которая подключена к проекту?

(android)Как внести изменения в библиотеку (ресурсы) которая подключена к проекту?

Такой вопрос,в сети нашел библиотеку,но данная библиотека не поддерживает рускязык (нет перевода файла string для ру региона) я залез в корень...

405
Android Выбор Activity при старте

Android Выбор Activity при старте

Есть MainActivity и при его старте вызывается AlertDialog в котором спрашивается какую активность запустить первую или вторуюПри выборе запускается...

499
Интерфейсы в Java и выделение памяти

Интерфейсы в Java и выделение памяти

Правильно ли следует понимать, что единственная причина, почему возможно имплементировать достаточно большое (65535) количество Interface в Java это...

442