Android的RecyclerView的使用總結

hengng14nqeam 8年前發布 | 15K 次閱讀 Android開發 移動開發

來自: http://my.oschina.net/fbf8866/blog/625902


     RecycleView是V7包下的,可以說是ListView的升級版,因為ListView是不支持橫向滑動,而RecycleView既支持橫向也支持縱向滑動,使用很方便,但是有一點坑爹的就是沒有條目的點擊事件,需要我們自己來寫

    首先Activity的布局如下:

    

    Item的布局我只是用一個簡單的TextView來寫的,所以就不傳圖了;

    然后在Activity中的onCreat方法中,獲取到RecyclerView控件,然后設定Layout管理器

    RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.rec);

    

    當然這里的setOrientation也可以設置為horizontal的,這樣就是橫向的

    MyAdaper就是適配器,他要繼承的是RecyclerView.Adaper,主要重寫里面的onCreatViewHolder(),onBindViewHolder(),getItemCount()這三個方法,

    onCreatViewHolder()就是創建ViewHolder

    onBindViewHolder()就是綁定ViewHolder,和數據綁定

    getItemCount()就是獲取總的條目數

private class MyAdapter extends RecyclerView.Adapter {
    @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(getBaseContext()).inflate(R.layout.item, null);
    Holder holder = new Holder(view);
    return holder;
}

    @Override
public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) {
    final Holder h = (Holder) holder;
     h.setData(position);
}

   @Override
public int getItemCount() {
    return list.size();
}
}

class Holder extends RecyclerView.ViewHolder {
    TextView mtv;

    public Holder(View view) {
        super(view);
        mtv = (TextView) view.findViewById(R.id.tv);
    }

    public void setData(int position) {
        mtv.setText(list.get(position).getName());
    }
}

這樣就可以了,但是有一點就是item沒有條目點擊事件,如果想要用的話,我們只能自己來寫個接口了,因為我的適配器是寫在Activity中的,也就是和OnCreat()在一個類中,所以如下:

    首先在全局中寫個接口

public interface  onItemClickListener{
    void onItemClick(View vi,int position);
}

    然后在適配器MyAdapter中

private onItemClickListener mOnItem;

public void onItemClickListener(onItemClickListener mOnItemClickListener){
    this.mOnItem = mOnItemClickListener;
}

    然后在onBindViewHolder()方法

@Override
public void onBindViewHolder( RecyclerView.ViewHolder holder, final int position) {
    final Holder h = (Holder) holder;
     h.setData(position);

    if(mOnItem != null){
      h.mtv.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
                mOnItem.onItemClick(h.mtv,position);
          }
      });
    }
}

這就可以了,用的話在new 出適配器的時候設置點擊事件

MyAdapter myAdapter = new MyAdapter();
    myAdapter.onItemClickListener(new onItemClickListener() {
        @Override
        public void onItemClick(View vi, int position) {
            Toast.makeText(Priactise.this, "這是" + position, Toast.LENGTH_SHORT).show();
        }
    });
mRecycle.setAdapter(myAdapter);

 

 本文由用戶 hengng14nqeam 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!