Как нажать на элемент списка в нумерации страниц с помощью 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, может быть, это полезно в качестве моего ответа
Придание атрибута из этого ответа