随着Android发展,Listview已经不能够很好的满足我们的需求了,这时候RecyclerView出现了。
今天我们就来谈谈RecyclerView的简单的使用
private RecyclerView rv_home_content;
private HomeFragmentAdapter myadapter;
rv_home_content = (RecyclerView) findViewById(R.id.rv_home_content);
//resultbeandata为填充的数据
myadapter=new HomeFragmentAdapter(mContext,resultbeandata);
rv_home_content.setAdapter(myadapter);
接下来就是重点了
public class HomeFragmentAdapter extends Adapter { public static final int BANNER = 0; public static final int CHANNEL = 1; ... //默认第一个为BANNER private static int CurrentType = BANNER; private Context mContext;private ResultBeanData resultbeandata; private final LayoutInflater mInflater; public HomeFragmentAdapter(Context mContext, ResultBeanData resultbeandata) {//从构造方法传进来的List的数据this.mContext = mContext; this.resultbeandata = resultbeandata; mInflater = LayoutInflater.from(mContext); } /* * 创建viewholder * * */ @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == BANNER) { return new BannerViewHolder(mContext, mInflater.inflate(R.layout.banner_viewpager, null)); } else if (viewType == CHANNEL) { return new ChannelViewHolder(mContext, mInflater.inflate(R.layout.channel_item, null)); } return null; } /* * getview() * 绑定数据 * */ @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (getItemViewType(position) == BANNER) { BannerViewHolder bannerviewholder = (BannerViewHolder) holder;//把数据设置到相应的控件,完成数据的填充 bannerviewholder.setData(); } else if (getItemViewType(position) == CHANNEL) { ChannelViewHolder channelviewholder = (ChannelViewHolder) holder; channelviewholder.setData(); } } /* * 返回item的个数,实际开发,从1慢慢变到最大数 * * */ @Override public int getItemCount() { return 2; } /* * 放回0-1的item类型 * */ @Override public int getItemViewType(int position) { switch (position) { case BANNER: CurrentType = BANNER; break; case CHANNEL: CurrentType = CHANNEL; break; } return CurrentType; } //频道的viewholder class ChannelViewHolder extends RecyclerView.ViewHolder { private Context mContext; private View itemView; private GridView gv_channel; public ChannelViewHolder(Context mContext, View itemView) { super(itemView); this.mContext = mContext; this.itemView = itemView;//使用GridView填充 gv_channel = (GridView) itemView.findViewById(R.id.gv_channel); } public void setData() { ChannelAdapter channelAdapter = new ChannelAdapter(mContext, resultbeandata); gv_channel.setAdapter(channelAdapter); gv_channel.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(mContext, "position==" + position, Toast.LENGTH_SHORT).show(); } }); } }public class ChannelAdapter extends BaseAdapter { private Context mContext; private ResultBeanData resultbeandata; public ChannelAdapter(Context mContext, ResultBeanData resultbeandata) { this.mContext=mContext; this.resultbeandata=resultbeandata; } @Override public int getCount() { return resultbeandata.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewholder; if(convertView==null){ convertView=View.inflate(mContext,R.layout.item_channel,null); viewholder=new ViewHolder(); viewholder.iv_channel=(ImageView)convertView.findViewById(R.id.iv_channel); viewholder.tv_des=(TextView) convertView.findViewById(R.id.tv_des); convertView.setTag(viewholder); } else{ viewholder= (ViewHolder) convertView.getTag(); } viewholder.tv_des.setText("hello");viewholder.iv_channel.setImageResource(R.drawable.a);return convertView; } class ViewHolder { private ImageView iv_channel; private TextView tv_des; } }}