android - 如何通过获取项目位置来聚焦/滚动到 recyclerView 中的特定项目
问题描述
我必须滚动到回收站视图中的特定项目。
首先,我需要通过匹配从活动传递给适配器的字符串来获取项目的位置。然后专注于该项目的位置。
例如,在适配器中有一个存储了EventID的 TextView ,我会将一个字符串从活动传递到适配器以将其与EventID匹配,然后获取该项目位置并将焦点/滚动设置到该特定位置。我已经在适配器中定义了一个方法来获取项目的位置,但我不知道如何从活动中调用它,因为它有viewholder作为参数。
我对如何实现recyclerView.scrollToPosition(mSkipTo)
或实现这一目标感到困惑。如何在我的活动中调用它。请给出一个代码示例,因为我是新手。
public class EventsAdapter extends RecyclerView.Adapter<EventsAdapter.ViewHolder> {
private Context context;
private final List<EventsDataModel> eventsDataModels;
private static int currentPosition = 0;
public EventsAdapter(Context context) {
super();
this.context = context;
this.eventsDataModels = new ArrayList<EventsDataModel>();
}
public void updateModels(List<EventsDataModel> newModels) {
eventsDataModels.clear();
eventsDataModels.addAll(newModels);
notifyDataSetChanged();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.event_card_new, parent, false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
final EventsDataModel dataAdapter = eventsDataModels.get(position);
......
......
viewHolder.EventID.setText(dataAdapter.getEventID());
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (context instanceof EventsActivity) {
((EventsActivity) context).clickOnEventType(viewHolder.EventID.getText().toString());
}
}
});
}
//How to call this method from activity ? Since ViewHolder cannot be obtained from there
public int getItemPosition(ViewHolder viewHolder,String inEventID){
int itemPos=0;
if (viewHolder.EventID.getText().equals(inEventID)) {
itemPos = viewHolder.getAdapterPosition();
}
return itemPos;
}
@Override
public int getItemCount() {
return eventsDataModels.size();
}
}
解决方案
将公共功能添加到您的适配器中。
public class EventsAdapter extends RecyclerView.Adapter<EventsAdapter.ViewHolder> {
...
public int getItemPosition(String eventId) {
for (int i = 0; i < eventsDataModels.size(); i++) {
if (eventsDataModels.get(i).getEventID().equals(eventId)) {
return i;
}
}
return -1;
}
活动:
private void scrollToPosition() {
String eventId = "someId";
int position = adapter.getItemPosition(eventId);
if (position >= 0) {
recycler.scrollToPosition(position);
}
}
推荐阅读
- python - 以 CSV 格式导出数据,但设置了不同的列。可以通过图书馆完成吗?
- java - 如何在 Spring MVC 中设计 API?
- python - 如何从带有字符串的列表中创建子列表?
- php - 警告:尝试访问 C 中 null 类型值的数组偏移量:
- python - 尝试使用 webbrowser 库搜索特殊字符不起作用
- linux - 如何发现 (RT)NETLINK 套接字连接到的网络命名空间?
- reactjs - 在 API 内的嵌套对象中达到价值
- flutter - Dart - 子类是否隐式继承 const 构造函数?
- c - “void *”类型的值不能分配给“link”的空类型。'=': 无法从 'void *' 转换为 'link'
- java - Unchecked Cast 警告 - 显示类型参数但不显示具体类型?