Как нажать на элемент списка в нумерации страниц с помощью RecyclerView в Android?

На этом изображении у меня есть список фильмов. Я хочу нажать на каждый элемент в списке

На этом изображении у меня есть список фильмов. Я хочу нажать на каждый
и каждый элемент в списке. Когда я нажимаю на любой элемент, он должен получить свою позицию и выполнить некоторые действия. Как это сделать? Я использовал нумерацию страниц, используя RecycleView?

Пример: если я нажму на фильм 10, должно появиться сообщение "Тост"
говоря "нажал на пункт 10"

4 ответа

Сделать интерфейс в класс адаптера для события клика на элементе просмотра переработчика.

    onItemClickListner onItemClickListner;

public void setOnItemClickListner(CommentsAdapter.onItemClickListner onItemClickListner) {
    this.onItemClickListner = onItemClickListner;
}

public interface onItemClickListner {
    void onClick(int position);//pass your object types.
}

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {
    // below code handle click event on recycler view item.
    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onItemClickListner.onClick(position); //pass any data
        }
    });
}

после того, как этот класс адаптера свяжется с утилитой просмотра и убедитесь, что адаптер не равен нулю, затем вызовите следующий код

        adapter.setOnItemClickListner(new CommentsAdapter.onItemClickListner()    {
        @Override
        public void onClick(int position) {
       // pass data get here   
          Toast.makeText(getApplicationContext(),""+position,Toast.LENGTH_LONG).show();
        }
    });
  // Used to cache the views within the item layout for fast access
 public class ViewHolder extends RecyclerView.ViewHolder implements 
                     View.OnClickListener {
    public TextView tvName;
    public TextView tvHometown;
    private Context context;

    public ViewHolder(Context context, View itemView) {
        super(itemView);
        this.tvName = (TextView) itemView.findViewById(R.id.tvName);
        this.tvHometown = (TextView) itemView.findViewById(R.id.tvHometown);
        // Store the context
        this.context = context;
        // Attach a click listener to the entire row view
        itemView.setOnClickListener(this);
    }

    // Handles the row being being clicked
    @Override
    public void onClick(View view) {
        int position = getAdapterPosition(); // gets item position
        if (position != RecyclerView.NO_POSITION) { // Check if an item was deleted, but the user clicked it before the UI removed it
            User user = users.get(position);
            // We can access the data within the views
            Toast.makeText(context, tvName.getText(), Toast.LENGTH_SHORT).show();
        }
    }
}

для получения дополнительной информации ссылка

В вашем адаптере попробуйте это

override fun onBindViewHolder(holder: ViewHolder, position: Int) {

    holder.itemView.setOnClickListener {

        // Do something here.

    }

Сделать интерфейс для загрузки элементов следующей страницы

public interface LoadMoreItems {
  void LoadItems();
}

Затем добавьте addOnScrollListener, чтобы загрузить больше элементов, когда ваше представление заканчивается

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrolled(RecyclerView recyclerView,
                                   int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);

                totalItemCount = linearLayoutManager.getItemCount();
                lastVisibleItem = linearLayoutManager
                        .findLastVisibleItemPosition();
                if (!loading
                        && totalItemCount <= (lastVisibleItem + visibleThreshold)) {
                    //End of the items
                    if (onLoadMoreListener != null) {
                        onLoadMoreListener.LoadItems();
                    }
                    loading = true;

                }
            }
        });

добавить onCreateViewHolder(), где я положил ProgressBar или нет.

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                  int viewType) {
    RecyclerView.ViewHolder vh;
    if (viewType == VIEW_ITEM) {
        View v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.list_row, parent, false);

        vh = new StudentViewHolder(v);
    } else {
        View v = LayoutInflater.from(parent.getContext()).inflate(
                R.layout.progressbar_item, parent, false);

        vh = new ProgressViewHolder(v);
    }
    return vh;
}

MainActivity, где я положил LoadItems(), чтобы добавить другие элементы

mAdapter.setOnLoadMoreListener(new LoadMoreItems() {
        @Override
        public void LoadItems() {
            DataItemsList.add(null);
            mAdapter.notifyItemInserted(DataItemsList.size() - 1);

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //   remove progress item
                    DataItemsList.remove(DataItemsList.size() - 1);
                    mAdapter.notifyItemRemoved(DataItemsList.size());
                    //add items one by one
                    //When you've added the items call the setLoaded()
                    mAdapter.setLoaded();
                    //if you put all of the items at once call
                    // mAdapter.notifyDataSetChanged();
                }
            }, 2000); //time 2 seconds

        }
    });

только что следовал за этим Github- репозиторием (Примечание: это использует AsyncTask, может быть, это полезно в качестве моего ответа

Придание атрибута из этого ответа

Другие вопросы по тегам