Android之RecyclerView控制元件的簡單運用
阿新 • • 發佈:2019-01-04
隨著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;
privateResultBeanData 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; } }}