Android Java RecyclerView. Не отображается на экране

171
15 октября 2018, 11:10

Видел подобные вопросы, не нашёл ответа на свой. Либо смотрю не туда. Проблема сама очень простая - приложение грузит данные и после этого должно отобразить из в списке RecyclerView. При этом, не отображается ничего. Ошибок никаких, просто завершаются все процессы и тишина. До этого использовал ListView на тех же данных, всё отображалось. Код Адаптера:

package com.artemonre.biblio;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import static com.artemonre.biblio.PlayerActivity.LOG_TAG;
public class NewBiblioAdapter extends RecyclerView.Adapter 
<NewBiblioAdapter.ViewHolder> {
ArrayList <Book> books;
public static class ViewHolder extends RecyclerView.ViewHolder {
    TextView name;
    TextView author;
    TextView length;
    ImageView icon;
    ImageView bookType;
    ImageView bookFace;
    public ViewHolder (View view) {
        super (view);
        Log.d (LOG_TAG, "ViewHolder create");
        this.name = view.findViewById (R.id.name);
        this.author = view.findViewById (R.id.author);
        this.length = view.findViewById (R.id.length);
        this.icon = view.findViewById (R.id.icon);
        this.bookType = view.findViewById (R.id.bookType);
    }
}
public NewBiblioAdapter (ArrayList <Book> books) {
    this.books = books;
    Log.d (LOG_TAG, "Adapter create");
    Log.d (LOG_TAG, "book 1 = " + books.get (0));
}
@Override
public NewBiblioAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    Log.d (LOG_TAG, "adapter OnCreate viewHolder");
    View v = LayoutInflater.from (parent.getContext()).inflate(R.layout.list_item, parent, false);
    ViewHolder vh = new ViewHolder (v);
    return vh;
}
@Override
public void onBindViewHolder(NewBiblioAdapter.ViewHolder holder, int position) {
    Log.d (LOG_TAG, "bind viewHolder");
    holder.name.setText (books.get (position).getName());
    holder.author.setText (books.get (position).getAuthor());
    if (books.get (position) instanceof AudioBook) {
        holder.icon.setBackgroundResource (R.drawable.iconaudio);
        holder.bookType.setBackgroundResource (R.drawable.typeaudio);
        holder.length.setText (books.get (position).getLength() + " минут");
    }
    else {
        holder.icon.setBackgroundResource (R.drawable.icontext);
        holder.bookType.setBackgroundResource (R.drawable.typetext);
        holder.length.setText (books.get (position).getLength() + " страниц");
    }
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
}
@Override
public int getItemCount() {
    return 0;
}
}

Это код инициализации Вью и присвоения адаптера: Поля

private RecyclerView recyclerView;
private NewBiblioAdapter adapter;
private RecyclerView.LayoutManager layoutManager;
{...
recyclerView = findViewById (R.id.recyclerView);
layoutManager = new LinearLayoutManager (ListActivity.this);
recyclerView.setLayoutManager (layoutManager);
adapter = new NewBiblioAdapter ((ArrayList<Book>) books);
recyclerView.setAdapter (adapter);
...}

Перед этим данные получаю в АсинкТаск, присвоение адаптера происходит в onPostExecute. Заранее благодарен за любую помощь.

Answer 1

Метод в NewBiblioAdapter:

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

Данный метод должен возвращать размер листа, который ты вкладываешь в адаптер... Если будет 0 ничего не будет рисоваться.

READ ALSO
Немного едет верстка на телефонах

Немного едет верстка на телефонах

Кто знает, почему на одних телефонах едет верстка, а на других нет? Причем в инспекторе 320-1920 все нормально выглядитНапишу ссылку на всякий...

167
Подключение шрифтов в stylus через mixin font-face

Подключение шрифтов в stylus через mixin font-face

есть у меня миксин font-face в sass

203
Замена символа в массиве

Замена символа в массиве

Не понимаю, как заменить один знак другим в массивеДля примера: имеем объект, который путем перебора выводится как массив, например:

200
Нахождение объекта по центру экрана

Нахождение объекта по центру экрана

Как сделать чтобы при перемещении объекта по холсту canvas, он всегда находился по центру и камера за ним "следила"?

174