当前位置: 首页 > 知识库问答 >
问题:

如何通过获取项目位置在recyclerView中聚焦/滚动到特定项目

谭景福
2023-03-14

我必须滚动到recyclerview中的特定项目。

首先,我需要通过匹配从活动传递给适配器的字符串来获取项的位置。然后聚焦到该项目的位置。

例如,在适配器中有一个存储了EventID的TextView,我将把一个字符串从activity传递给适配器,使其与EventID匹配,然后获取该项目的位置,并将焦点/滚动设置到该特定位置。我在适配器中定义了一个方法来获取项的位置,但我不知道如何从活动中调用它,因为它有viewholder作为参数。

我对如何实现<代码>回收视图感到困惑。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();
}


}

共有2个答案

从渊
2023-03-14

公开接口并在活动中实现它。在该接口中声明一个返回整数值(位置)的方法。在onClick中调用该方法。从活动中设置接口并重写该方法,然后使用recyclerView。滚动定位(mSkipTo)

井学
2023-03-14

将公共功能添加到适配器中。

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);
    }
}
 类似资料:
  • 在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位置,将开关盒设置为每个卡视图的意向活动 当我点击card view I时,他会打开另一个页面,当你点击card view 2时,他会打开另一个页面。 看看我的密码 在recyclerView中获取已点击项目的位置,我在recyclerView中创建cardview和链接 我想获取位

  • 因此,我有一个标准的,它获取帖子列表并向用户显示。我的问题是,当用户进入活动时,我希望能够将焦点更改为特定的帖子。 例如,用户A看到他收到一个通知,表示有人喜欢他/她的帖子。他/她单击该通知,它将加载用户帖子的活动,然后焦点将更改为用户喜欢的帖子的位置。 我使用意图将传递给活动。然后,我运行,并尝试查看帖子的ID是否与我通过intent发送的

  • 问题内容: 我有一张带垂直滚动条的大桌子。我想使用jQuery / Javascript滚动到此表中的特定行。有内置的方法可以做到这一点吗? 问题答案: 死了很简单。 无需插件 。 文档。

  • 我在屏幕顶部有一个包含标题的水平recycle view(类别recycle view ),在它下面有另一个包含标题的垂直recycle view(类别项目)和包含每个标题项目的子recycle view。 我需要根据垂直回收视图(分类项目)中最后显示的标题,使水平回收视图(类别回收视图)滚动到特定标题。

  • 问题内容: 我有一个与和一起进行的活动。我正在使用来水平显示图像列表。当我点击在图像上的在活动中应显示图像的大局观。到目前为止,一切正常。 现在,活动中还有两个:和。当我单击时,中的图像应左移,并且中的缩略图也应反映此更改。与的情况类似。 我能够旋转。但是,如何旋转缩略图?我如何获得的? 码: 活动XML: 我的活动代码: 我的RecyclerView自定义适配器: 问题答案: 我想您正在使用a

  • 我已经设置了一个回收器视图,每行都有文本视图和隐藏按钮。 如果用户单击该项,就会显示按钮。 如果用户单击其他项,则按钮将被隐藏。 再循环视图将位置发送到每个接口的活动,该活动更改其属性。 只要不滚动recyclerview,一切都能完美运行。 Layoutmanager.getchildat(职位) 现在,当项目超出视图时,用户滚动recyclerview,位置就会出错。每向下滚动一个用户单击的项