Recyclerview не вызывать onCreateViewHolder

Мой RecyclerView не вызывает onCreateViewHolder , onBindViewHolder даже конструктор MenuViewHolder , поэтому в RecyclerView ничего не появляется. Я помещаю журналы для отладки, и журнал не отображается. Что может быть проблемой?

Мой адаптер:

 public class MenuAdapter extends RecyclerView.Adapter { private LayoutInflater inflater; List data = Collections.emptyList(); public MenuAdapter(Context context, List data) { Log.i("DEBUG", "Constructor"); inflater = LayoutInflater.from(context); Log.i("DEBUG MENU - CONSTRUCTOR", inflater.toString()); this.data = data; for(Menu menu: this.data){ Log.i("DEBUG MENU - CONSTRUCTOR", menu.menu); } } @Override public MenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.row_menu, parent, false); MenuViewHolder holder = new MenuViewHolder(view); return holder; } @Override public void onBindViewHolder(MenuViewHolder holder, int position) { Log.i("DEBUG MENU", "onBindViewHolder"); Menu current = data.get(position); holder.title.setText(current.menu); } @Override public int getItemCount() { return 0; } class MenuViewHolder extends RecyclerView.ViewHolder { TextView title; ImageView icon; public MenuViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.menuText); } } 

Моя пользовательская строка XML:

   

и мой fragment:

 public NavigationFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, "false")); if (savedInstanceState != null) { mFromSavedInstaceState = true; } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_navigation, container, false); RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.drawer_list); MenuAdapter adapter = new MenuAdapter(getActivity(), getData()); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); recyclerView.setAdapter(adapter); return view; } 

Метод getItemCount returns 0 . Поэтому RecyclerView никогда не пытается создать представление. Заставьте его вернуть что-то greater than 0 .

Другой – убедитесь, что вы установили менеджер компоновки в RecyclerView:

 recycler.setLayoutManager(new LinearLayoutManager(this)); 

я забыл добавить ниже строки после того, как я добавил, что это сработало для меня

 recyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); 

FWIW, я наблюдал это, когда я устанавливал адаптер просмотра ресайклера, прежде чем адаптер был фактически инициализирован. Решение состояло в том, чтобы убедиться, что recyclerView.setAdapter(adapter) был вызван с ненулевым адаптером

Это не относится к вашему конкретному случаю. Но это может помочь кому-то другому.

Эта причина может быть неосторожным использованием следующего метода

 recyclerView.setHasFixedSize(true); 

Если не использовать с осторожностью, это может привести к тому, что onBindView и onCreateViewHolder не будут вообще вызваны, без ошибок в журналах.

Установка высоты TextView в custom.xml или RecyclerView . Если height является wrap-content , RecyclerView не будет виден.

Это произошло, когда мой RecyclerView находился внутри ScrollView и я использовал Android Support Library 23.0. Чтобы исправить это, я обновился в Android Support Library 23.2:

В build.gradle:

 dependencies { ... compile 'com.android.support:appcompat-v7:23.2.+' compile 'com.android.support:cardview-v7:23.2.+' } 

У меня была та же проблема, потому что я использовал android.support.constraint.ConstraintLayout в ресурсе компоновки. FrameLayout изменение на FrameLayout .

Добавьте это в свой class адаптера

  @Override public int getItemCount() { return mDataset.size(); } 

Установите менеджер компоновки в RecyclerView, как показано ниже:

RecyclerView recyclerView = (RecyclerView) findViewById (R.id.recycler_view_right); Адаптер NavigationAdapter = новый NavigationAdapter (это, FragmentDrawer.getData ()); recyclerView.setAdapter (адаптер); recyclerView.setLayoutManager (новый LinearLayoutManager (this));

См. Мой ответ, если вы используете библиотеку привязки данных Android. Убедитесь, что вы устанавливаете макет для recyclerview, а количество элементов должно быть больше 0

  @BindingAdapter({"entries", "layout"}) public static void setEntries(RecyclerView view, ArrayList listOfUsers, int layoutId) { if (view.getAdapter() == null) { view.setLayoutManager(new LinearLayoutManager(view.getContext())); SingleLayoutAdapter adapter = new SingleLayoutAdapter(layoutId) { @Override protected Object getObjForPosition(int position) { return listOfUsers.get(position); } @Override public int getItemCount() { return listOfUsers.size(); } }; view.setAdapter(adapter); } } 

Счастливое кодирование 🙂

В моем случае я установил идентификатор моего RecyclerView в «recyclerView». Кажется, что этот идентификатор уже определен где-то, потому что когда я изменил его на другой ID, методы из адаптера были вызваны должным образом.

Другой вариант: если вы отправляете этот список objetc с помощью get, проверьте, есть ли у вас правильная ссылка, например

 private list listObjetc; //Incorrect public void setListObjetcs(list listObjetc){ listObjetc = listObjetc; } //Correct public void setListObjetcs(list listObjetc){ this.listObjetc = listObjetc; } 

Если вы используете пользовательский адаптер, не забудьте установить ItemCount в размере вашей коллекции.

В моем случае размер моего списка был 0, и он не вызывал метод onCreateViewHolder. Мне нужно было отобразить сообщение в центре для пустого списка в качестве заполнителя, чтобы я сделал это так, и он работал как шарм. Ответа на этот вопрос @ Konstantin Burov.

  @Override public int getItemCount() { if (contactList.size() == 0) { return 1; } else { return contactList.size(); } } 

Я боролся с этой проблемой в течение многих часов. Я использовал fragment. И вопрос не возвращал view . Ниже мой код:

 ProductGridBinding binding = DataBindingUtil.inflate( inflater, R.layout.product_grid, container, false); mLinearLayoutManager = new LinearLayoutManager(getActivity()); mLinearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); binding.rvNumbers.setHasFixedSize(true); binding.rvNumbers.setLayoutManager(mLinearLayoutManager); binding.rvNumbers.setAdapter(adapter); View view = binding.getRoot(); return view; 

Пожалуйста, сделайте следующее.

 @Override public int getItemCount() { return data.size(); } 

Моим партнером был метод onBindViewHolder (владелец, позиция), который не был вызван методом RecyclerView.adaptor. Вызывается метод onCreateViewHolder, вызывается метод getItemCount. Если вы прочитаете спецификации адаптера Recycliewiew, вы узнаете, что если вы переопределили onBindViewHolder (держатель, позиция, список полезных нагрузок), будут вызваны в пользу. Поэтому, пожалуйста, будьте осторожны.

Если вы поместите wrap_content как высоту своего списка, а также высоту списка ваших элементов, ничего не появится, и никто из ваших функций recyclerView не будет вызван. Исправьте высоту элемента или поместите match_parent для высоты списка. Это решило мою проблему.

В моем случае после изменения Activity для использования ViewModel и DataBinding я забыл удалить метод метода onCreate из метода onCreate . Удалив его, моя проблема решена.

Моя ошибка заключалась в раздувании неправильного представления в Fragment onCreateView.

  • Как создать Android-hashи Facebook Facebook?
  • Есть ли какой-нибудь метод sizeof в Java?
  • Android - Сохранить изображение с URL на SD-карту
  • округлить до 2 десятичных знаков в java?
  • Разница между JSONObject и JSONArray
  • Proguard и размышления в Android
  • android MapView в fragmentе
  • Разделение на Java всегда приводит к нулю (0)?
  • Integer.toString (int i) vs String.valueOf (int i)
  • несколько файлов dex определяют landroid / support / annotation / AnimRes
  • Импортирование двух classов с одинаковым именем. Как обращаться?
  • Interesting Posts

    Как создать полностью настраиваемый диалог / всплывающее окно в Android (изменить цвет наложения и расположение диалогового windows)

    Как загрузить динамические внешние компоненты в угловое приложение

    Почему vim не подчиняется моему расширению в файлах python?

    Тайм-аут при запуске тестов xcodebuild под Xcode 6 через SSH

    Возможно ли создать рекурсивный запрос в Access?

    Как написать книгу Excel в MemoryStream в .NET?

    Только мой компьютер не подключается к определенному IP-адресу

    Доступ к локальному хосту на Mac OS X с машины Parallels

    Показать форму без кражи фокуса?

    Cygwin cygdrive и Windows Command Prompt

    Могу ли я заставить ssh-agent ждать, пока я не буду использовать ssh для запроса пароля?

    Перемещение объектов и таймеров

    Как я могу получить основную причину высоких вызовов отложенных процедур?

    Как заблокировать сайт в Google Chrome?

    Как я повторяю метод каждые 10 минут после нажатия кнопки и завершения ее на другой кнопке

    Давайте будем гением компьютера.