Перемещение позиции Recyclerview на основе строки - PullRequest
1 голос
/ 12 января 2020

У меня есть Recyclerview, где я хотел бы отсортировать определенные c элементы в зависимости от их значения String. Например, если какая-либо из кнопок в RecyclerView содержит строку «Naked», это значение перемещается в верхнюю часть RecyclerView, а все другие экземпляры, содержащие «Naked» и любой другой текст, также перемещаются далее вверх по этому списку.

{
    public CategoryGridAdapter(List<String> items, OnListItemClickListener<String> listener)
    {
        super(items, listener);
    }

    @NonNull @Override
    public BaseViewHolder<String> onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
    {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.item_grid_category, parent, false);
        return new CategoryGridViewHolder(view);
    }

    @Override
    public void onBindViewHolder(BaseViewHolder<? super String> holder, int position)
    {
        String item = getItem(position);
        holder.bind(item);
        holder.itemView.findViewById(R.id.button).setOnClickListener(v -> getListener().onItemClick(item, holder.itemView));


    }
}

Ответы [ 2 ]

0 голосов
/ 12 января 2020

Возможно, вы захотите рассмотреть класс ListAdapter Образец и документация ListAdapter

Затем вы можете легко просто отсортировать список с помощью таких вещей, как циклы, а затем передать его в submitList (newList);

Затем ListAdapter обрабатывает все за вас, вы даже получаете отличную анимацию для перемещенных позиций. Так что вам не нужно сообщать, какие элементы в списке изменились, он обнаруживает это сам.

Учебник Youtube для ListAdapter

В вашем случае вы можете затем просто вручную сортируйте список, например, используя Comperator, и передайте его в submitList каждый раз, когда что-то меняется.

0 голосов
/ 12 января 2020

Передача LayoutManger с конструктором

class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
        private LinearLayoutManager manager;

        public Adapter(LinearLayoutManager manager)
        {
            this.manager=manager;
        }


    @Override
    public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
       if (holder.button.gettext().tostring().equals("Naked")
                        {manager.scrollToPosition(0);}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...