2016-11-02 2 views
1

에서 위치를 얻을이 내 클래스입니다 : 내가 MovieViewHolder onCreateViewHolder 클래스 매개 변수의 패스 INT 위치에있을 때 하지 이잖아 작품 :(여기내가 recyclerview.Adapter 클래스가 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);} 

하지만 위치는 난이 경우에는 무엇을 할 수 있는지 여전히 빨간색 사전

에서 덕분? 나는이 작업이 완료있어 알렉스에

편집 감사 :

@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) 메소드를 오버라이드 (override) 할 수 .... 그 부모 행의 모두에서 거짓을 필요로하고 너의 상태를 거기에 두라. (if (position % 2 == 0) 그리고 해당 조건에 따라 뷰 유형을 반환하십시오.) 물론 두 가지 뷰 유형을 선언하고 기준에 따라 올바른 유형을 반환해야합니다.

onCreateViewHolder에서 viewType을 확인하고 해당 위치에 맞는 레이아웃을 부 풀릴 수 있습니다.

+0

때문에이 행과 조건을 옮길 수 없다. –

+0

MovieViewHolder holder = new MovieViewHolder (row); –

+1

아니, 당신은 그것을 얻지 못했습니다. 너는 그걸 움직일 필요가 없다. if 논리를 이동하고 뷰 유형을 반환하면됩니다. onCreateViewHolder에서 viewtype을 사용하므로 (viewType == A) row = layoutInflater.inflate (R.layout.grid_list3, parent, false) 등의 경우에 사용됩니다. 예제에서 두 경우 모두 동일한 레이아웃을 부 풀려야합니다. – Alex