1. 程式人生 > >Android之RecyclerView控制元件的簡單運用

Android之RecyclerView控制元件的簡單運用

隨著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;
    }
}
}