0

Я разрабатываю приложение погоды, в котором я хотел использовать два Views внутри RecyclerView, который имеет CursorAdapter в качестве своего члена. Я хочу использовать один View, чтобы отображать текущую погоду и другой вид для отображения погоды других дней. Мой RecyclerView работает отлично, если я использую только один View для отображения погоды. Я также перезаписал getItemViewType()? to get to know which View` type Я должен раздуваться.Гетерогенные макеты внутри RecyclerView

Код для getItemViewType():

private static int VIEW_TYPE_TODAY = 0; 
private static int VIEW_TYPE_FUTURE_DAY = 1; 

@Override 
    public int getItemViewType(int position) { 
     if(position == VIEW_TYPE_TODAY) 
      return VIEW_TYPE_TODAY; 
     else 
      return VIEW_TYPE_FUTURE_DAY; 
} 

Код для newView() из CursorAdapter которой я не перезаписывается:

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    int viewType = getItemViewType(cursor.getPosition()); 
    int layoutId = -1; 
    if(viewType==VIEW_TYPE_TODAY) 
     layoutId = R.layout.list_item_forecast_today; 
    else if(viewType==VIEW_TYPE_FUTURE_DAY) 
     layoutId = R.layout.list_item_forecast; 
    View view = LayoutInflater.from(context).inflate(layoutId, parent, false); 
    return view; 
} 

Независимо от того, что значение position в getItemViewType() есть функция всегда возвращается VIEW_TYPE_TODAY ,

Может кто-нибудь, пожалуйста, сообщите, что я делаю неправильно?

+0

вы не можете использовать 'CursorAdapter' с' RecyclerView' – Blackbelt

+0

Да, я могу использовать CursorAdapter с RecyclerView @Blackbelt –

+0

как? С каких пор? – Blackbelt

ответ

1

переопределение getItemViewType недостаточно, чтобы иметь ListView с гетерогенными строками. Вы также должны переопределить getViewTypeCount(), чтобы вернуть число гетерогенных строк, которые вы хотите иметь (2 в вашем случае). Пожалуйста, помните, что ваш getItemViewType должен возвращать целые числа непрерывных чисел в диапазоне [0, getViewTypeCount() -1]

+0

Спасибо, но сейчас вместо сегодняшней погоды завтра погода раздувает Layout list_item_forecast_today, потому что cursor.getPosition() возвращает -1 вместо 0 –

+0

, это ошибка в вашей текущей реализации. Переопределение 'getViewTypeCount' не изменит нормальное поведение – Blackbelt

+0

эй проверить мой код для адаптера просмотра recycler и указать на ошибку в моей реализации [ссылка] (http://stackoverflow.com/questions/38309177/recyclerview-not- правильно-отображать-гетерогенные макеты) –

0

Here - хороший пример гетерогенного рециркуляции. Я не размещаю как решение, а для тех, кто ищет такой вид recyclerview.Hope он помогает.

+0

Если не ответ, то он, скорее всего, лучше подходит как комментарий. – ToothlessRebel

Смежные вопросы