Просто реализовано RecyclerView
в моем коде, замена ListView
.
Все отлично работает Данные отображаются.
Но сообщения об ошибках регистрируются:
15:25:53.476 E/RecyclerView: No adapter attached; skipping layout
15:25:53.655 E/RecyclerView: No adapter attached; skipping layout
для следующего кода:
ArtistArrayAdapter adapter = new ArtistArrayAdapter(this, artists);
recyclerView = (RecyclerView) findViewById(R.id.cardList);
recyclerView.setHasFixedSize(true);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
Как вы видите, я подключил адаптер для RecyclerView
. Так почему я продолжаю получать эту ошибку?
Я читал другие вопросы, связанные с той же проблемой, но ни один из них не помог.
android
android-recyclerview
recycler-adapter
equitharn
источник
источник
Ответы:
Можете ли вы убедиться, что вы вызываете эти операторы из «основного» потока (например, внутри
onCreate()
метода). Как только я вызываю те же утверждения из «отложенного» метода. В моем случаеResultCallback
я получаю то же сообщение.По моему
Fragment
, вызов кода ниже изнутриResultCallback
метода производит то же самое сообщение. После перемещения кода вonConnected()
метод моего приложения сообщение пропало ...источник
Я получал те же два сообщения об ошибках, пока не исправил две вещи в своем коде:
(1) По умолчанию при реализации методов в
RecyclerView.Adapter
нем генерируется:Убедитесь, что вы обновили свой код, чтобы он сказал:
Очевидно, что если у вас есть ноль предметов, то вы получите ноль вещей, отображаемых на экране.
(2) Я не делал этого, как показано в верхнем ответе: CardView layout_width = "match_parent" не соответствует родительской ширине RecyclerView
(3) РЕДАКТИРОВАТЬ: БОНУС: Также убедитесь, что вы настроили
RecyclerView
так:Не так:
Я видел некоторые учебники, использующие последний метод. Хотя это работает, я думаю, что это тоже генерирует эту ошибку.
источник
public int getItemCount() { return artists == null ? 0 : artists.size(); }
и LayoutInflaterView itemView = LayoutInflater. from(parent.getContext()).inflate(R.layout.fragment_listitem, parent, false);
У меня такая же ситуация с вами, с дисплеем все в порядке, но в локации появляется ошибка. Вот мое решение: (1) Инициализировать RecyclerView и адаптер привязки ON CREATE ()
(2) вызвать notifyDataStateChanged, когда вы получите данные
В исходном коде recyclerView есть другой поток для проверки состояния данных.
В dispatchLayout () мы можем найти ошибку:
источник
У меня есть эта проблема, несколько раз проблема recycleView положить в ScrollView объект
После проверки реализации причина, как представляется, заключается в следующем. Если RecyclerView помещается в ScrollView, то во время шага меры его высота не указывается (поскольку ScrollView допускает любую высоту) и, в результате, становится равной минимальной высоте (согласно реализации), которая, по-видимому, равна нулю.
У вас есть несколько вариантов исправить это:
(Можно следить
android.support.v4.widget.NestedScrollView
также)источник
1) Создать ViewHolder , который ничего не делает :)
2) Снова создайте RecyclerView , который ничего не делает :)
3) Теперь, когда ваш настоящий переработчик не готов, просто используйте образец, как показано ниже.
Это не лучшее решение, но оно работает! Надеюсь, это полезно.
источник
Это происходит, когда вы не устанавливаете адаптер на этапе создания:
Просто перенесите настройку адаптера в onCreate с пустыми данными и, когда у вас есть вызов данных:
источник
Проверьте, не пропустили ли вы вызов этого метода в вашем адаптере
источник
Убедитесь, что вы установили менеджер макета для вашего RecyclerView:
Вместо этого
LinearLayoutManager
вы также можете использовать другие менеджеры по расположению.источник
У меня была та же ошибка, я исправил это, делая это, если вы ждете данных, таких как я, используя модификацию или что-то подобное
Поставить перед созданием
Положите их в свой Oncreate
Когда вы получаете данные положить
Теперь перейдите в ваш класс ArtistArrayAdapter и сделайте следующее: если ваш массив пуст или равен нулю, GetItemCount вернет 0, если нет, то размер массива художников будет равен
источник
Эти строки должны быть в
OnCreate
:источник
Это происходит потому, что фактический раздутый макет отличается от того, на который вы ссылались при поиске recyclerView. По умолчанию при создании фрагмента метод onCreateView выглядит следующим образом:
return inflater.inflate(R.layout.<related layout>,container.false);
Вместо этого отдельно создайте представление и используйте его для обращения к recyclerView.
View view= inflater.inflate(R.layout.<related layout>,container.false); recyclerview=view.findViewById(R.id.<recyclerView ID>); return view;
источник
Сначала инициализируйте адаптер
Когда в наборе данных есть изменения, просто вызовите метод updateComments.
источник
Для тех, кто использует
RecyclerView
внутри фрагмента и раздувает его из других представлений: при раздувании всего представления фрагмента, убедитесь, что вы связываетеRecyclerView
его с корневым представлением.Я правильно подключался и делал все для адаптера, но я никогда не делал привязку. Этот ответ на @Prateek Агарвал имеет все это для меня, но здесь более разработки.
Котлин
Ява
источник
Просто замените приведенный выше код этим, и он должен работать. То, что вы сделали неправильно, вы называли setAdapter (адаптер) перед вызовом менеджера по расположению.
источник
Это действительно простая ошибка, которую вы получаете, нет необходимости делать какие-либо коды в этом. Эта ошибка возникает из-за неправильного файла макета, используемого операцией. В IDE я автоматически создал макет v21 макета, который стал макетом по умолчанию для действия. все коды, которые я сделал в старом файле макета и в новом, содержали только несколько кодов XML, что привело к этой ошибке.
Решение: Скопируйте все коды старого макета и вставьте в макет v 21
источник
В моем случае я устанавливал адаптер внутри
onLocationChanged()
обратного вызова И отлаживал в эмуляторе. Так как он не обнаружил изменение местоположения, он никогда не срабатывал. Когда я установил их вручную в расширенных элементах управления эмулятора, все заработало как положено.источник
Я решил эту ошибку. Вам просто нужно добавить менеджер раскладки и добавить пустой адаптер.
Понравился этот код:
источник
Просто добавьте следующее
RecyclerView
Пример:
источник
У меня была эта ошибка, и я некоторое время пытался ее исправить, пока не нашел решение.
Я создал закрытый метод buildRecyclerView и дважды вызывал его, сначала в onCreateView, а затем после обратного вызова (при котором я получаю данные из API). Это мой метод buildRecyclerView в моем фрагменте:
Кроме того, мне нужно изменить метод get-Item-Count в моем адаптере, потому что при On-Create-View список пуст, и он из-за ошибки. Итак, мой get-Item-Count следующий:
источник
В моей ситуации это был забытый компонент, который находится в классе ViewHolder, но его не было в файле макета.
источник
У меня была та же проблема, и я понял, что настраивал оба LayoutManage r и адаптер после получения данных из моего источника вместо того, чтобы установить два в методе onCreate .
Затем уведомил адаптер об изменении данных
источник
Эта проблема заключается в том, что вы не добавляете ни одного
LayoutManager
для своегоRecyclerView
.Другая причина в том, что вы вызываете этот код в NonUIThread. Обязательно вызовите этот вызов в UIThread.
Решение только нужно добавить
LayoutManager
дляRecyclerView
перед вамиsetAdapter
в UI Thread.источник
Моя проблема была в том, что мой вид переработчика выглядел так
Когда это должно было выглядеть так
источник
RecyclerView
НапримерMyRecyclerViewAdapter
, в своем классе адаптера создайте конструктор со следующими параметрами.mData
это данные, которые вы передадите в адаптер. Это необязательно, если у вас нет данных для передачи.mInflater
этоLayoutInflater
объект, который вы создали, и вы используете вOnCreateViewHolder
функции адаптера.После этого вы присоединяете адаптер в MainActivity или куда хотите в главном / пользовательском интерфейсе, как
источник
Решается путем установки инициализированного пустого списка и адаптера внизу и вызова notifyDataSetChanged при получении результатов.
источник
Я потерял 16 минут своей жизни из-за этой проблемы, поэтому я просто признаю эту невероятно смущающую ошибку, которую я совершил - я использую Butterknife и связываю представление в onCreateView в этом фрагменте.
Потребовалось много времени, чтобы понять, почему у меня не было менеджера компоновки - но очевидно, что представления внедряются, поэтому они на самом деле не будут нулевыми, поэтому переработчик никогда не будет нулевым ... упс!
Если вы получаете такую проблему, проследите свое мнение и используйте что-то вроде
uiautomatorviewer
источник
Немного ответа, но у меня возникла та же проблема, даже с правильным кодом. Иногда это просто самая простая из марок. В этом случае ошибка ОП также может отсутствовать
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
в Манифесте, который воспроизводит ту же ошибку.источник
В моем случае это произошло потому, что я встроил RecyclerView в LinearLayout.
Ранее у меня был файл макета, содержащий только один корневой RecyclerView следующим образом
Я полагаю, что проблема находится в пределах 3 разделенных строк. Во всяком случае, я думаю, что это простая проблема, я буду работать над этим завтра; думал, что я должен написать то, что я нашел, прежде чем забывать об этой теме.
источник
Добавление еще одного ответа, так как я наткнулся на эту тему, погуглив ошибку. Я пытался инициализировать,
PreferenceFragmentCompat
но я забыл раздуть предпочтение XMLonCreatePreferences
следующим образом:Ошибка была загадкой, пока я не понял, что
PreferenceFragmentCompat
должен использоватьRecyclerView
внутренне.источник
// Это происходит, когда вы не устанавливаете адаптер на этапе создания: вызовите notifyDataSetChanged (), когда ответ API получает свою работу
источник