Получить текущую позицию внутри onCreateViewholder для recyclerview android

У меня есть код как:

@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;
}

Я хочу, чтобы текущая позиция внутри адаптера onCreateViewHolder. Пусть кто-нибудь поможет мне в этом. Заранее спасибо.

android,listview,android-recyclerview,

-1

Ответов: 2


3 принят

Не уверен, чего вы ожидаете достичь. 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(...); 
    }
}

Я вижу в вашем коде, что вы отправляете данные в конструкторе ViewHolder. Это побеждает цель этого класса, потому что у вас будет только один экземпляр ViewHolder для типа объекта, и ему нужно только удерживать информацию о представлении макета, поэтому вам не нужно искать представления каждый раз, когда вам нужно связать объект. Вам действительно нужно использовать onBindViewHolder для привязки вашего объекта, например:

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

Надеюсь это поможет.


2

Думаю, вам нужно:

getAdapterPosition();
андроид, ListView, андроид-recyclerview,