RecyclerView多布局展示示例
注:所需的依赖
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
1.适配器类
public class Myadapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { //定义两种不同的布局类型 private int ONE_ITEM=1; private int TWO_ITEM=2; private Context mcontext; private ArrayList<String> mlist; public Myadapter(Context mcontext, ArrayList<String> mlist) { this.mcontext = mcontext; this.mlist = mlist; } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { LayoutInflater lay = LayoutInflater.from(mcontext); RecyclerView.ViewHolder holder=null; //根据不同布局类型将XML引入进来 if (ONE_ITEM==viewType){ View view = lay.inflate(R.layout.two_item, parent, false); holder=new OneViewHolder(view); }else { View view2 = lay.inflate(R.layout.one_item, parent, false); holder=new TwoViewHolder(view2); } return holder; } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { //根据不同的ViewHolder绑定数据 if (holder instanceof OneViewHolder){ ((OneViewHolder)holder).tv3.setText(mlist.get(position)); }else { ((TwoViewHolder) holder).tv1.setText(mlist.get(position)); ((TwoViewHolder) holder).tv2.setText(mlist.get(position)); } } @Override public int getItemCount() { return mlist.size(); } //定义两个ViewHolder类,将不同布局的控件初始化 class OneViewHolder extends RecyclerView.ViewHolder{ TextView tv3; public OneViewHolder(View itemView) { super(itemView); tv3=(TextView)itemView.findViewById(R.id.adapter_linear_text); } } class TwoViewHolder extends RecyclerView.ViewHolder{ TextView tv1,tv2; public TwoViewHolder(View itemView) { super(itemView); tv1=(TextView)itemView.findViewById(R.id.adapter_two_1); tv2=(TextView)itemView.findViewById(R.id.adapter_two_2); } } //根据具体条件判断返回哪种类型的布局 @Override public int getItemViewType(int position) { if (position % 3==0){ return TWO_ITEM; }else { return ONE_ITEM; } } }
2.MainActivity类
public class MainActivity extends AppCompatActivity { private RecyclerView mrv; private Myadapter md; private ArrayList<String> mlist; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initdata(); initview(); } private void initdata() { mlist=new ArrayList<>(); for (int i=0;i<30;i++){ mlist.add("位置"+i); } } private void initview() { mrv=(RecyclerView)findViewById(R.id.recy); md=new Myadapter(MainActivity.this,mlist); mrv.setLayoutManager(new LinearLayoutManager(this)); mrv.setAdapter(md); } }