获取 android recyclerview 的 onCreateViewholder 中的当前位置

Raj*_*mar 1 android listview android-recyclerview

我的代码为:

@Override
public CustomRatingHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(
            R.layout.custom_rating_lyt, null);

    CustomRatingReviews ratingObj = (null != mRatingLst && position < mRatingLst.size()) ?
            mRatingLst.get(position) : null;

    CustomRatingHolder viewHolder = new CustomRatingHolder(mAdapContext, ratingObj, view);
    position++;
    return viewHolder;
}
Run Code Online (Sandbox Code Playgroud)

我想要回收器适配器的 onCreateViewHolder 内的当前位置。让任何人帮助我摆脱这个困境。提前致谢。

And*_*lan 6

不确定您期望实现什么目标。onCreateViewHolder 会为集合中的每个对象调用一次,以便绑定、膨胀必要的布局并查找所有视图。您可以根据整数膨胀不同的布局并绑定不同的 ViewHolders:onCreateViewHolder(ViewGroup parent, int viewType)

如果您有不同的视图类型,则需要重写将使用项目位置调用的 getItemViewType 方法,以便您可以确定所需的视图类型。此方法返回一个 int,您将在 onCreateViewHolder 中收到该值。

这是一个很好的例子:

@Override
public int getItemViewType(int position) {
    final Object dataObj = mDataSet.get(position);

    if (dataObj instanceof String) {
        return 0;
    }

    if (dataObj instanceof User) {
        return 1;
    }
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch(viewType) {
        case 0:
        return new StringViewHolder(...);

        case 1:
        return new UserViewHolder(...); 
    }
}
Run Code Online (Sandbox Code Playgroud)

我在您的代码中看到您正在 ViewHolder 的构造函数中发送数据。这违背了此类的目的,因为对于一种对象类型,您只有一个 ViewHolder 实例,并且它只需要保存布局视图信息,因此您不需要每次需要绑定对象时都查找视图。您实际上需要使用 onBindViewHolder 来绑定您的对象,例如:

public void onBindViewHolder(UsersGroupsAdapter.ViewHolder holder, int position) {
    // or something similar
    holder.bind(mData.get(position));
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。