RecyclerView的使用

jopen 8年前發布 | 9K 次閱讀 Android開發 移動開發

1,java

RecyclerView mRecyclerView;
List<> mList = new ArrayList();
public void initWidget() {
    setContentView(R.layout.activity_main);
    VarietyAdapter varietyAdapter = new VarietyAdapter(mList);
    mRecyclerView = (RecyclerView) findViewById(R.id.variety_selection_recyclerView);
    //瀑布流,列數是5
    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.VERTICAL);
    //線性
    //LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
    //卡片
    //GridLayoutManager mGridLayoutManager = new GridLayoutManager(this,5);
    mRecyclerView.setLayoutManager(staggeredGridLayoutManager);
    //設置recycler擁有固定的大小,提高展示效率
    mRecyclerView.setHasFixedSize(true);
    //設置默認的動畫,在移除和添加的效果下展現,現在github上可以找到許多拓展,有興趣的可以找找
    //admBinding.modulationRecyclerView.setItemAnimator(new DefaultItemAnimator());
    mRecyclerView.setAdapter(varietyAdapter);

    //點擊事件需要自己寫在Adapter里
    varietyAdapter.setOnItemClickListener(this);
    //刷新列表-數據變更時
    varietyAdapter.refresh(mList);
}

2,適配器Adapter

public class VarietyAdapter extends RecyclerView.Adapter implements View.OnClickListener,View.OnLongClickListener{
//    private TextView name;
    List<String> mList;
    public VarietyAdapter(List<String> list) {
        mList = list;
    }
    class ViewHolder extends RecyclerView.ViewHolder{
        private TextView name;
        public ViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.item_text);
        }

        public TextView getName() {
            return name;
        }
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item,null);
        ViewHolder viewHolder = new ViewHolder(view);
        //用于OnItemClickLitener的點擊事件
        view.setOnClickListener(this);
        view.setOnLongClickListener(this);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ViewHolder vh = (ViewHolder) holder;
        vh.getName().setText(mList.get(position));
        //用于OnItemClicklistener的position 標記
        vh.itemView.setTag(position);
    }
    @Override
    public int getItemCount() {
        return mList.size();
    }
    //刷新數據- - -添加
    public void  addItem(List<String> list,int postion){
        mList = list;
        //新添加一條
        notifyItemInserted(postion);
    }
    //刷新數據- - -刪除
    public void deleteItem(List<String> list,int postion){
        mList = list;
        //刪除一條
        notifyItemRemoved(postion);
    }
    //刷新數據- - -全部,一般用這個就好
    public void refresh(List<Variety> list) {
        mVarietyList = list;
        notifyDataSetChanged();//刷新全部數據
    }
    //
    /**
     * 定義item點擊事件||||
     * */
    //子布局的點擊事件
    public void onClick(View v) {
        if (mOnItemClickListener != null) {
            //注意這里使用getTag方法獲取數據
            mOnItemClickListener.onItemClick(v, Integer.parseInt(v.getTag().toString()));
        }
    }
    //
    private OnRecyclerViewItemClickListener mOnItemClickListener = null;
    //define interface
    public static interface OnRecyclerViewItemClickListener {
        void onItemClick(View view, int position);
    }
    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
        this.mOnItemClickListener = listener;
    }
    /**長按點擊事件*/
    @Override
    public boolean onLongClick(View v) {
        if (mOnItemLongClickListener != null) {
            //注意這里使用getTag方法獲取數據
            mOnItemLongClickListener.onItemLongClick(v, Integer.parseInt(v.getTag().toString()));
        }
        return false;
    }
    private OnRecyclerViewItemLongClickListener mOnItemLongClickListener = null;
    public static interface OnRecyclerViewItemLongClickListener {
        void onItemLongClick(View view, int position);
    }
    public void setOnItemLongClickListener(OnRecyclerViewItemLongClickListener listener) {
        this.mOnItemLongClickListener = listener;
    }
}


來自: http://my.oschina.net/Jieth/blog/596020

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