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

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

 public class MenuAdapter extends RecyclerView.Adapter<MenuAdapter.MenuViewHolder> { private LayoutInflater inflater; List<Menu> data = Collections.emptyList(); public MenuAdapter(Context context, List<Menu> data) { Log.i("DEBUG", "Construtor"); inflater = LayoutInflater.from(context); Log.i("DEBUG MENU - CONSTRUTOR", inflater.toString()); this.data = data; for(Menu menu: this.data){ Log.i("DEBUG MENU - CONSTRUTOR", 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:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/menuText" android:text="Dummy Text" android:layout_gravity="center_vertical" android:textColor="#222"/> 

И мой фрагмент:

  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; } 

Solutions Collecting From Web of "Recyclerview не вызывать onCreateViewHolder"

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

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

 recycler.setLayoutManager(new LinearLayoutManager(this)); 

FWIW, я наблюдал это, когда я устанавливал адаптер просмотра recycler, прежде чем адаптер был фактически инициализирован. Решение состояло в том, чтобы убедиться, что 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.+' } 

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

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

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

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

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

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

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

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

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