RecycleView的简单使用

慕课网

导入包后,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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值