RecycleView的简单使用

来源:互联网 发布:mcafee是什么软件 编辑:程序博客网 时间:2024/05/18 05:57

慕课网

导入包后,mainactivity的xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context=".MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/recycler"        android:layout_width="match_parent"        android:layout_height="match_parent"></android.support.v7.widget.RecyclerView></RelativeLayout>
MainAciticity的代码

public class MainActivity extends ActionBarActivity {    private RecyclerView mRecycler;    private List<String> mData;    private SimpleAdapterRecycler simpleAdapterRecycler;        @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initView();        initData();        simpleAdapterRecycler = new SimpleAdapterRecycler(this, mData);        mRecycler.setAdapter(simpleAdapterRecycler);        //设置recyclerView显示的样式        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);        mRecycler.setLayoutManager(linearLayoutManager);    }    private void initView() {        mRecycler = (RecyclerView) findViewById(R.id.recycler);    }    private void initData() {        mData = new ArrayList<String>();        for (int i = 'A'; i < 'Z'; i++) {            mData.add("" + (char) i);        }    }}
它的adapter,记住这个MyAdapter!!!

public class SimpleAdapterRecycler extends RecyclerView.Adapter<SimpleAdapterRecycler.MyViewHolder> {    private Context context;    private List<String> mData;    private LayoutInflater mInflater;    public SimpleAdapterRecycler(Context context, List<String> mData) {        this.context = context;        this.mData = mData;        this.mInflater = LayoutInflater.from(context);    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {        View view = mInflater.inflate(R.layout.item_single, viewGroup, false);        MyViewHolder viewHolder = new MyViewHolder(view);        return viewHolder;    }    @Override    public void onBindViewHolder(MyViewHolder viewHolder, int i) {        viewHolder.t.setText(mData.get(i));    }    @Override    public int getItemCount() {        return mData.size();    }    class MyViewHolder extends RecyclerView.ViewHolder {        TextView t;        public MyViewHolder(View itemView) {            super(itemView);            t = (TextView) itemView.findViewById(R.id.item_tv);        }    }}
item的布局

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="72dp"    android:background="#44ff0000">    <TextView        android:id="@+id/item_tv"        android:layout_gravity="center"        android:layout_width="match_parent"        android:layout_height="match_parent" /></FrameLayout>

到此显示的使一个无分割线的listview的recyclerview,下面加分割线,加其他类型的布局

//给其设置分割线DividerLine dividerLine = new DividerLine(DividerLine.VERTICAL);dividerLine.setSize(1);dividerLine.setColor(0xFF00ff00);mRecycler.addItemDecoration(dividerLine);
 /**     * 分隔线装饰     */    public class DividerLine extends RecyclerView.ItemDecoration {        /**         * 水平方向         */        public static final int HORIZONTAL = LinearLayoutManager.HORIZONTAL;        /**         * 垂直方向         */        public static final int VERTICAL = LinearLayoutManager.VERTICAL;        // 画笔        private Paint paint;        // 布局方向        private int orientation;        // 分割线颜色        private int color;        // 分割线尺寸        private int size;        public DividerLine() {            this(VERTICAL);        }        public DividerLine(int orientation) {            this.orientation = orientation;            paint = new Paint();        }        @Override        public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {            super.onDrawOver(c, parent, state);            if (orientation == VERTICAL) {                drawHorizontal(c, parent);            } else {                drawVertical(c, parent);            }        }        /**         * 设置分割线颜色         *         * @param color 颜色         */        public void setColor(int color) {            this.color = color;            paint.setColor(color);        }        /**         * 设置分割线尺寸         *         * @param size 尺寸         */        public void setSize(int size) {            this.size = size;        }        // 绘制垂直分割线        protected void drawVertical(Canvas c, RecyclerView parent) {            final int top = parent.getPaddingTop();            final int bottom = parent.getHeight() - parent.getPaddingBottom();            final int childCount = parent.getChildCount();            for (int i = 0; i < childCount; i++) {                final View child = parent.getChildAt(i);                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();                final int left = child.getRight() + params.rightMargin;                final int right = left + size;                c.drawRect(left, top, right, bottom, paint);            }        }        // 绘制水平分割线        protected void drawHorizontal(Canvas c, RecyclerView parent) {            final int left = parent.getPaddingLeft();            final int right = parent.getWidth() - parent.getPaddingRight();            final int childCount = parent.getChildCount();            for (int i = 0; i < childCount; i++) {                final View child = parent.getChildAt(i);                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();                final int top = child.getBottom() + params.bottomMargin;                final int bottom = top + size;                c.drawRect(left, top, right, bottom, paint);            }        }    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.menu_main,menu);        return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {        switch (item.getItemId()){            case R.id.action_listview:                mRecycler.setLayoutManager(new LinearLayoutManager(this));                break;            case R.id.action_gridview:                mRecycler.setLayoutManager(new GridLayoutManager(this,3));                break;            case R.id.horizonGridview:                mRecycler.setLayoutManager(new StaggeredGridLayoutManager(5,StaggeredGridLayoutManager.HORIZONTAL));                break;            case R.id.action_staggered:                break;        }        return true;    }}
menu布局

<menu xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    tools:context=".MainActivity">    <item        android:id="@+id/action_settings"        android:orderInCategory="100"        android:title="@string/action_settings"        app:showAsAction="never" />    <item        android:id="@+id/action_listview"        android:orderInCategory="100"        android:title="action_listview"        app:showAsAction="never" />    <item        android:id="@+id/action_gridview"        android:orderInCategory="100"        android:title="action_gridview"        app:showAsAction="never" />    <item        android:id="@+id/horizonGridview"        android:orderInCategory="100"        android:title="horizonGridview"        app:showAsAction="never" />    <item        android:id="@+id/action_staggered"        android:orderInCategory="100"        android:title="action_staggered"        app:showAsAction="never" /></menu>
把mainactivity跟adapter各复制一份用于演示瀑布流。点击菜单键的瀑布流跳转另一个activity

在新adapter中初始化一些随机高度

private List<Integer> mHeights;

mHeights = new ArrayList<Integer>();for(int i = 0;i<mData.size();i++) {    mHeights.add((int) (100 + Math.random() * 300));}
在onbindviewholder中把view的高度重新设置

ViewGroup.LayoutParams lp = viewHolder.itemView.getLayoutParams();lp.height = mHeights.get(i);viewHolder.itemView.setLayoutParams(lp);

0 0
原创粉丝点击