RecyclerView

        RecyclerView是Google於5.0後新推出的控件,用於替代ListView,在ListView中convertView是複用的,而在RecyclerView中,是緩存的ViewHolder對象,因此在RecyclerView中有一個onCreateViewHolder方法,將itemView傳遞給每一個建立的ViewHolder,在ViewHolder中獲取itemView上的每一個View並做爲其成員。經過onBindViewHolder中viewHolder獲得要操做的view。緩存

 

經過recyclerView.setLayoutManager()來設置要顯示的列表類型,如今有三種:ide

1. LinearbyLayoutManager性能

2. GridLayoutManagerthis

3. StaggeredGridLayoutManager  瀑布流spa

 

recyclerView.setHasFixedSize(true); 設置每一個Item高度一致,可提升性能code

 

recyclerView的Adapter需繼承RecyclerView.Adapter,實現 onCreateViewHolder、onBindViewHolder和getItemCount方法。對象

並建立ViewHolder 繼承 RecyclerView.ViewHolder,將其做爲泛型類型傳遞給RecyclerView.Adapter的<>中。blog

 

onCreateViewHolder 獲取ItemView,建立ViewHolder時做爲參數傳遞出去。繼承

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);

        view.setOnClickListener(this);
        return new ViewHolder(view);
    }
View Code

 

ViewHolder獲得itemView後,獲取其子控件,做爲成員屬性。外部經過viewHolder獲得itemView下全部控件再作操做。接口

public static class ViewHolder extends RecyclerView.ViewHolder{

        private TextView mTextView;
        public ViewHolder(View v){
            super(v);
            mTextView = (TextView)v.findViewById(R.id.item_tv);

            if (flag){
                mTextView.setHeight(200);
            }else{
                mTextView.setHeight(280);
            }
            flag=!flag;
        }

        public TextView getmTextView() {
            return mTextView;
        }
    }
View Code

 

onBindViewHolder 獲取到viewHolder,對其內部view填充數據等操做。

public void onBindViewHolder(ViewHolder holder, int position) {
        holder.getmTextView().setText(dataset.get(position));
        holder.getmTextView().setTag(dataset.get(position));
    }
View Code

 

關於RecyclerView的點擊事件處理:

自定義一個點擊事件處理的接口,定義其實現的方法傳遞兩個參數(view, data)。向外部暴露一個set方法用於傳遞這個接口的實現,在viewHolder或者onCreateViewHolder將設置itemView的onClick事件,將事件的處理交給從外部傳遞過來的自定義的點擊事件。

 

添加數據:adapter.notifyItemInsered();

刪除數據:adapter.notifyItemRemove();

相關文章
相關標籤/搜索