2016-11-02 3 views
1

У меня есть класс recyclerview.Adapter это мой класс: , когда я передача INT позиция в параметрах класса MovieViewHolder onCreateViewHolder то не работает :(получить позицию из RecyclerView.Adapter

public class Main_Recycle_Adapter extends RecyclerView.Adapter<Main_Recycle_Adapter.MovieViewHolder> { 
    List<Main> movies = Collections.emptyList(); 
    LayoutInflater layoutInflater; 
    Context context; 

    public Main_Recycle_Adapter(Context context, List<Main> movies){ 
     this.context = context; 
     layoutInflater = LayoutInflater.from(context); 
     this.movies = movies; 


    } 
//;;;;;;;;;;;;;; 
@Override 
public int getItemCount() { 
    return movies.size(); 
} 


    @Override 
    public long getItemId(int position) { 
     return position; 

    } 
    //[[[[[[[[[[[[[[[[[[ 


    @Override 
    public MovieViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View row; 
      if ((position % 2) == 0){ 
     row = layoutInflater.inflate(R.layout.grid_list3, parent, false);} 
      else{row = layoutInflater.inflate(R.layout.grid_list3, null);} 
     MovieViewHolder holder = new MovieViewHolder(row); 

     return holder; 
    } 
    @Override 
    public void onBindViewHolder(MovieViewHolder holder, int position) { 
     Main thisMovie = movies.get(position); 

     holder.tozih.setText(thisMovie.getName()); 
     holder.tablooo.setImageResource(context.getResources().getIdentifier(thisMovie.getLogo(), "mipmap", context.getPackageName())); 
    } 


    public class MovieViewHolder extends RecyclerView.ViewHolder { 

     private TextView tozih; 

     private ImageView tablooo; 

     public MovieViewHolder(View itemView) { 
      super(itemView); 

      tozih = (TextView) itemView.findViewById(R.id.textView1); 

      tablooo = (ImageView) itemView.findViewById(R.id.imageView1); 
     } 
    } 
} 

здесь я хочу положение для четных и нечетных строк:

if ((position % 2) == 0){ 
      row = layoutInflater.inflate(R.layout.grid_list3, parent, false);} 
       else{row = layoutInflater.inflate(R.layout.grid_list3, null);} 

, но позиция по-прежнему красный с не может устранить ошибку что я могу сделать в этом случае заранее спасибо

?

EDIT благодаря Алексу я получил это сделано:

@Override 
public int getItemViewType(int position) 
{ int viewType ; 
    if((position % 2) == 0) 
     viewType = 0; 
    else 
     viewType =1; 
    return viewType; } 
//[[[[[[[[[[[[[[[[[[ 
@Override 
public MovieViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
{ 
    View row; 
    if (viewType == 0){ 
     row = layoutInflater.inflate(R.layout.grid_list2, parent, false);} 
    else 
    { row = layoutInflater.inflate(R.layout.grid_list3, parent, false);} 

просто необходимо, что родитель и ложна в обоих рядах ....

+1

Вы не можете напрямую обращаться к 'position'. Вместо этого используйте метод getItemId(). 'GetItemId()' также нуждается в исправлении, чтобы получить позицию. –

+0

Я тестировал это, но ... не работает –

ответ

1

Вы можете переопределить метод getItemViewType(int position) и поставьте свое состояние там. (если (позиция% 2 == 0) и типы вида возврата, основанные на этом условии.) Конечно, вам нужно объявить два типа представления и вернуть правильный, основываясь на ваших критериях.

В вашем onCreateViewHolder вы можете проверить тип viewType и раздуть правильный макет для этой позиции.

+0

Я не могу переместить строку и состояние из-за этого: –

+0

Держатель MovieViewHolder = новый MovieViewHolder (строка); –

+1

Нет, ты не понял. Вам не нужно это перемещать. Вам просто нужно переместить логику if и вернуть тип вида. в вашем onCreateViewHolder у вас есть вид, поэтому вы будете использовать if (viewType == A) row = layoutInflater.inflate (R.layout.grid_list3, parent, false) и т. д. Кстати, вы раздуваете один и тот же макет в обоих случаях в вашем примере – Alex

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