Динамически настраивать высоту элемента recyclerview

not необходимо поместить реализацию в файл заголовка, см. альтернативное решение в конце этого ответа.

В любом случае причина, по которой ваш код не работает, что при создании экземпляра шаблона компилятор создает новый класс с заданным аргументом шаблона. Например:

template
struct Foo
{
    T bar;
    void doSomething(T param) {/* do stuff using T */}
};

// somewhere in a .cpp
Foo f; 

При чтении этой строки компилятор создаст новый класс (назовем его FooInt), что эквивалентно следующему:

struct FooInt
{
    int bar;
    void doSomething(int param) {/* do stuff using int */}
}

Следовательно, компилятор должен иметь доступ к реализации методов, чтобы создать экземпляр с аргументом шаблона (в данном случае int). Если эти реализации не были в заголовке, они не были бы доступны, поэтому компилятор не смог бы создать экземпляр шаблона.

Общим решением для этого является запись объявления шаблона в заголовок файла, затем реализовать класс в файле реализации (например, .tpp) и включить этот файл реализации в конец заголовка.

// Foo.h
template 
struct Foo
{
    void doSomething(T param);
};

#include "Foo.tpp"

// Foo.tpp
template 
void Foo::doSomething(T param)
{
    //implementation
}

Таким образом, реализация по-прежнему отделена от объявления, но доступен компилятору.

Другое решение состоит в том, чтобы сохранить реализацию отдельно и явно создать все экземпляры шаблона, которые вам понадобятся:

// Foo.h

// no implementation
template  struct Foo { ... };

//----------------------------------------    
// Foo.cpp

// implementation of Foo's methods

// explicit instantiations
template class Foo;
template class Foo;
// You will only be able to use Foo with int or float

Если мое объяснение isn ' t достаточно ясно, вы можете взглянуть на C ++ Super-FAQ по этому вопросу .

0
задан Gerald Tan 13 July 2018 в 17:41
поделиться

1 ответ

Вы можете использовать технику разбиения на страницы, разделяя позиции ур на группы, и каждая группа имеет только три элемента. допустим, у вас есть 30 предметов, поэтому разделите их на 10 групп, и каждая группа имеет такой ключ, как номер страницы, поэтому, когда он открывается в первый раз, вы увидите страницу 1, которая содержит 3 элемента, и прокручивая и используя бесконечный свиток страница 2 и т. д.

это как разделить элементы

 int pageNumbers = (int) Math.ceil(items.size() / 3.0);
            for (int i = 1; i <= pageNumbers; i++) {
                if (i == 1)
                    firstIndex = 0;
                else
                    firstIndex += 3;
                lastIndex=firstIndex+3;
                ArrayList<String> itemsPerPage=new ArrayList<>();

                for (int j = firstIndex; j < lastIndex; j++)
                {
                 itemsPerPage.add(items.get(j));   
                }
                    pages.put(i, items);
            }

теперь у вас есть HashMap с элементами на странице и путем внедрения onSrollListener с recyclerView вы можете обновить страницу и получить : page = 2, который содержит 3 элемента и отображает новые 3 элемента с ресайклером

0
ответ дан Mohamed Fawzy 17 August 2018 в 12:19
поделиться
Другие вопросы по тегам:

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