2016-03-07 75 views
0

我是材料设计的新手。我正试图用两行布局实现RecyclerView。我的问题是,两行都显示相同的布局,即'one_fragmnet_recycler'。我想要做的是0行,'one_fragmnet_recycler'必须膨胀,行1 recycler_one_pic_poll必须inflate.Can任何人都可以告诉我哪里出错了。我CODESA重如下:无法在RecyclerView中充气2种不同的布局

public class OnefragmentAdapter extends RecyclerView.Adapter<OnefragmentAdapter.PersonViewHolder> { 
ArrayList<OneFragmentData>arr_data; 
Context context; 

public OnefragmentAdapter(ArrayList<OneFragmentData> arr_data) { 
    this.arr_data = arr_data; 
    //this.context=context; 
} 

@Override 
public int getItemViewType(int position) { 
    return super.getItemViewType(position); 

} 

@Override 
public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { 
    View v; 
    Log.i("view type outside",""+viewType); 
    PersonViewHolder pvh; 
    if(viewType==0) { 
     v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.one_fragmnet_recycler, viewGroup, false); 

     Log.i("view type inside 0", "" + viewType); 



    } 
    else { 
     v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_one_pic_poll, viewGroup, false); 

     Log.i("view type inside 1", "" + viewType); 

    } 


    return new PersonViewHolder(v); 
} 

@Override 
public void onBindViewHolder(PersonViewHolder holder, int position) { 

} 

@Override 
public int getItemCount() { 
    return /*arr_data.size()*/2; 
} 

public static class PersonViewHolder extends RecyclerView.ViewHolder { 
    CardView card_one; 
    ImageView imv_profile_pic, imv_indicator, imv_timer, imv_followers; 
    TextView tv_uname, tv_posted_date, tv_desc, tv_followers; 

    public PersonViewHolder(View itemView) { 
     super(itemView); 
     /*card_one=(CardView)itemView.findViewById(R.id.card_one); 
     imv_profile_pic=(ImageView)itemView.findViewById(R.id.imv_profile_pic); 
     imv_indicator=(ImageView)itemView.findViewById(R.id.imv_indicator); 
     imv_timer=(ImageView)itemView.findViewById(R.id.imv_timer); 
     imv_followers=(ImageView)itemView.findViewById(R.id.imv_followers); 
     tv_uname=(TextView)itemView.findViewById(R.id.tv_uname); 
     tv_posted_date=(TextView)itemView.findViewById(R.id.tv_posted_date); 
     tv_desc=(TextView)itemView.findViewById(R.id.tv_desc); 
     tv_followers=(TextView)itemView.findViewById(R.id.tv_followers);*/ 
    } 
} 
} 
+0

你试过调试吗?这是否会涉及其他部分? –

+0

它不会在其他部分,因为我总是得到viewType = 0; – Tiny

回答

0

你需要写在onBindViewHolder)代码(

 if (position == 0){ 
        //Inflate for 1st row 
     } 
     else { 
       //Inflate for remaining rows 
     } 
0

您需要调用getViewType()方法,并将其类型

@Override 
public int getItemViewType(int position) { 
if(pos==0){ 
return VIEW_TYPE_0; 
} 
return VIEW_TYPE_1; 
} 
... 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int 
viewType){ 
    if(viewType== VIEW_TYPE_0){ 
    return viewHolder; 
    }else if(viewType== VIEW_TYPE_1){ 
return viewHolder; 
} 
} 

对于视图你需要创建两个持有者,这将根据位置(视图类型)膨胀两个布局,并从getViewType()方法传递。 不要在这里检查onBindViewHolder()视图类型,因为它的回收视图在滚动上回收它的视图。