Мой 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", "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:
<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;
}
java
android
android-recyclerview
Malinosqui
источник
источник
Ответы:
Твой
getItemCount
методreturns 0
. ПоэтомуRecyclerView
никогда не пытается создать представление. Заставь это вернуть что-тоgreater than 0
.например
источник
Еще один, убедитесь, что вы установили менеджер макета на RecyclerView:
источник
я забыл добавить строку ниже после того, как я добавил, что это работает для меня
источник
Это не относится к вашему конкретному случаю. Но это может помочь кому-то еще.
Эта причина может быть небрежное использование следующего метода
Если не использовать с осторожностью, это может привести к тому, что
onBindView
иonCreateViewHolder
не будут вызываться вообще, без ошибок в журналах.источник
Пожалуйста, установите менеджер макета,
RecyclerView
как показано ниже:источник
Что бы это ни стоило, я наблюдал это, когда устанавливал адаптер представления переработчика до того, как адаптер был фактически инициализирован. Решением было убедиться, что он
recyclerView.setAdapter(adapter)
был вызван с ненулевым адаптеромисточник
Я действительно очень надеюсь, что это поможет кому-нибудь когда-нибудь. Я просто потратил больше часа на этот сумасшедший!
У меня было это:
Когда я должен был иметь это:
Поскольку я по глупости назвал свой адаптер
adapter
, он был затенен адаптером представления переработчика в блоке применения! Я переименовал адаптер в projectAdapter, чтобы выделить его, и проблема решена!источник
Установка высоты
TextView
вcustom.xml
илиRecyclerView
. Если высота естьwrap-content
, тоRecyclerView
не будет видна.источник
Это произошло, когда я
RecyclerView
был внутри,ScrollView
и я использовал библиотеку поддержки Android 23.0. Чтобы исправить, я обновился до библиотеки поддержки Android 23.2:В build.gradle:
источник
Добавьте это в свой класс адаптера
источник
Может быть, это кому-то поможет, но если вы установите видимость вашего RecycleView в GONE, методы адаптера не будут вызываться вообще ... Мне потребовалось некоторое время, чтобы понять это.
источник
У меня была такая же проблема, потому что я использовал
android.support.constraint.ConstraintLayout
в макете ресурса. Поменял наFrameLayout
помог.источник
android.support.constraint.ConstraintLayout
?Другой вариант, если вы отправляете этот список objetc с помощью get, проверьте, если у вас есть правильная ссылка, например
источник
Я боролся с этой проблемой в течение многих часов. Я использовал фрагмент. И проблема не возвращалась
view
. Ниже мой код:источник
Смотрите мой ответ, если вы используете библиотеку привязки данных Android - Убедитесь, что вы устанавливаете макет для recyclerview и количество элементов должно быть больше 0
Удачного кодирования :-)
источник
В моем случае я установил идентификатор моего RecyclerView на «recyclerView». Кажется, этот идентификатор где-то уже был определен, потому что когда я изменил его на другой идентификатор, методы из адаптера были вызваны правильно.
источник
Если вы используете собственный адаптер, не забудьте установить ItemCount на размер вашей коллекции.
источник
В моем случае размер моего списка был равен 0, и он не вызывал метод onCreateViewHolder. Мне нужно было отобразить сообщение в центре для пустого списка в качестве заполнителя, поэтому я сделал это так, и это сработало как шарм. Ответ от @Konstantin Burov помог.
источник
Моим сторонником был переопределенный метод onBindViewHolder (держатель, позиция) RecyclerView.adaptor, который не вызывался. Был вызван метод onCreateViewHolder, вызван getItemCount. Если вы прочитаете спецификации для Recyclerview Adapter, вы узнаете, что если вы переопределили onBindViewHolder (держатель, позиция, список полезных нагрузок) будет вызван в пользу. Поэтому, пожалуйста, будьте осторожны.
источник
onBindViewHolder
?Если вы укажете wrap_content как высоту вашего списка, а также высоту вашего списка элементов, ничего не будет отображаться, и ни одна из ваших функций recyclerView не будет вызвана. Зафиксируйте высоту элемента или укажите match_parent для высоты списка. Это решило мою проблему.
источник
Моей ошибкой было раздувание неверного представления во Fragment onCreateView.
источник
перейти к вашему XML. И измените свой макет, чтобы обернуть содержимое. Один элемент скрывает следующий, поэтому методы не работают!
источник
Пожалуйста, сделайте следующее
источник
В моем случае после изменения Activity на использование ViewModel и DataBinding я забыл удалить
setContentView
вызовonCreate
метода из метода. Удалив его, моя проблема решена.источник
Для меня это было потому, что setHasStableIds (true); метод был установлен. Удалите это, и это будет работать
источник
recyclerView.setAdapter (адаптер); Вызванный список recyclerView заполняется путем вызова метода.
источник
Убедитесь , что
XML
иKoltin/Java
код О матче. В моем случае у меня была проблема с тем,ViewHolder
как я написал:Но так как мой код XML:
Я должен был изменить основной ряд в:
Кроме того, мне также пришлось удалить:
Я надеюсь это тебе поможет :)
источник
В моем случае мне не хватало звонков
notifyDataSetChanged()
после установки списка в адаптере.источник
В моем случае я не могу установить ориентацию в LinearLayout.
После добавления ориентации проблема исправлена.
источник
Моя проблема была
layout_height
иlayout_width
RecyclerView установлен в0dp
.источник