Задать вопрос
@mond_bond

Адаптер вообще не вызывает onCreateViewHolder?

Фрагмент
public class PostFragment extends BaseFragment implements PostView {
    @Inject
    PostPresenter presenter;

    private RecyclerView recyclerView;
    private long categoryId
    PostAdapter adapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View v = inflater.inflate(R.layout.fragment_post, container, false);

        recyclerView = (RecyclerView) v.findViewById(R.id.postFragmentRecycler);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

        String s  = "word";
        ArrayList<String> array = new ArrayList<>();
        for(int i = 0; i != 20; i++) {
            array.add(s);
        }

        adapter = new PostAdapter(array);
        recyclerView.setAdapter(adapter);

        Bundle arguments = getArguments();
        categoryId = arguments.getLong(PublicActivity.CATEGORY_NAME);

        return v;
    }

Сам адаптер
public class PostAdapter extends RecyclerView.Adapter {

    private ArrayList<String> arrayList;

    public PostAdapter(ArrayList<String> arrayList) {
        Log.d("ADAPTER", "constructor");
        this.arrayList = arrayList;
    }

     class MyViewHolder extends RecyclerView.ViewHolder {

        public View view;

        MyViewHolder(View itemView) {
            super(itemView);
            this.view = itemView;
        }
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d("ADAPTER", "CREATE");
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.post_item, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        Log.d("ADAPTER", "bind");
    }

    @Override
    public int getItemCount() {
        Log.d("ADAPTER", "size = " + String.valueOf(arrayList.size()));
        return arrayList.size();
    }
}

Картинка фрагмента
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="exp.glorio.view.fragments.PostFragment">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/postFragmentRecycler"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
</RelativeLayout>


и непосредственно вывод

03-17 17:11:23.753 30538-30538/exp.glorio D/ADAPTER: constructor
03-17 17:11:23.903 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.903 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.953 30538-30538/exp.glorio D/ADAPTER: size = 20
03-17 17:11:23.953 30538-30538/exp.glorio D/ADAPTER: size = 20


Как видно из вывода, конструктор и подсчет количества вызывается, а связка и onCreateViewHolder нет. Я далеко не первый раз с адаптером работаю и такого не было. В приложении есть много других адаптеров, они работают.
  • Вопрос задан
  • 359 просмотров
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
@mond_bond Автор вопроса
Проблема была в корневом лейауте активити. Он был android.support.constraint.ConstraintLayout. Его сочетание с параметром "match_parent" для контейнера фрагмента дало такой результат. Если заменить ConstraintLayout на любой другой - все будет работать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы