RecyclerView的使用详情

来源:互联网 发布:游族网络 被告 编辑:程序博客网 时间:2024/05/18 13:48

RecyclerView作为替代Listview的最佳选择,用户可以通过修改Manager使它变成GrdiView和Listview以及实现瀑布流的效果。

  <android.support.v4.widget.SwipeRefreshLayout                android:id="@+id/swipe_layout"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:layout_marginLeft="16dip"                android:layout_marginRight="16dip"                android:layout_marginTop="5dip">                  <android.support.v7.widget.RecyclerView                    android:id="@+id/recycler"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                     android:scrollbars="none">   </android.support.v7.widget.RecyclerView>            </android.support.v4.widget.SwipeRefreshLayout>

以上的xml代码将RecyclerView嵌套在了系统刷新控件中。免去了自定义刷新的烦恼。
而在Activity代码中,一定要设置它的Manager.

       //设置LayoutManager        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());        //GridViewManager        //RecyclerView.LayoutManager layoutManager = new  GridLayoutManager(getActivity(), 3);        //瀑布流Manager        //RecyclerView.LayoutManager layoutManager = new StaggeredGridLayoutManager(3, OrientationHelper.VERTICAL);        recycler.setLayoutManager(layoutManager);

因为RecyclerView没有实现条目点击事件,所以我们需要在Adapter适配器中定义接口实现该方法:

/** * 数据适配器 */public class ClassAdapter extends RecyclerView.Adapter<ClassAdapter.ClassViewHolder> {//数据源    private ArrayList<HashMap<String, Object>> list;    private OnRecyclerViewItemClickListener mListener = null;    //定义接口    public interface OnRecyclerViewItemClickListener {        void onItemClick(View view, int position);    }    //构造函数    public ClassAdapter(ArrayList<HashMap<String, Object>> list) {        this.list = list;    }    @Override    public ClassViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_class, null);        ClassViewHolder holder = new ClassViewHolder(view);        return holder;    }    @Override    public void onBindViewHolder(ClassViewHolder holder, final int position) {        holder.tvClassName.setText(list.get(position).get("name").toString());        //条目点击监听实现方法,自己定义条目点击接口,通过在onBindViewHolder()方法中获得position,从而获得条目的item位置.        if (mListener != null) {            holder.itemView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    mListener.onItemClick(v, position);                }            });        }    }    @Override    public int getItemCount() {        return list.size();    }    public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {       this.mListener = listener;    }    class ClassViewHolder extends RecyclerView.ViewHolder {        private TextView tvClassName;        public ClassViewHolder(View itemView) {            super(itemView);            tvClassName = (TextView) itemView.findViewById(R.id.tv_class_names);        }    }}

至此我们就可以在Activity代码中通过调用Adapter的setOnItemClickListener();实现条目点击了。

 linearAdapter.setOnItemClickListener(new LinearAdapter.OnRecyclerViewItemClickListener() {            @Override            public void onItemClick(View view, int position) {                Toast.makeText(getActivity(), lists.get(position), Toast.LENGTH_LONG).show();            }        });
0 0