zoukankan      html  css  js  c++  java
  • RecyclerView的ListView显示效果

    RecyclerView只关注回收和复用View

    而不在乎item的显示位置,和动画,分割线。

    总的来说它也是需要一个adapter来进行数据和视图的绑定。这个adapter是强制使用ViewHolder模式。

    package com.example.recycleview;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    
    public class MainActivity extends ActionBarActivity {
        private RecyclerView recycler;
        private List<String> mData;
        // 自定义适配器
        private SimpAdapter mAdapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initData();
            initView();
    
        }
    
        private void initView() {
            recycler = (RecyclerView) findViewById(R.id.recyclerView);
    
            mAdapter = new SimpAdapter(mData, this);
            recycler.setAdapter(mAdapter);
            // 设置排列方式
            LinearLayoutManager manager = new LinearLayoutManager(this,
                    LinearLayoutManager.VERTICAL, false);
            recycler.setLayoutManager(manager);
            // 设置分割线
            recycler.addItemDecoration(new DividerItemDecoration(this,
                    DividerItemDecoration.VERTICAL_LIST));
        }
    
        private void initData() {
            mData = new ArrayList<String>();
            for (char i = 'A'; i < 'z'; i++) {
                mData.add(String.valueOf(i));
            }
    
        }
    }

    适配器

    package com.example.recycleview;
    
    import java.util.List;
    
    import android.content.Context;
    import android.support.v7.widget.RecyclerView;
    import android.support.v7.widget.RecyclerView.ViewHolder;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;
    
    public class SimpAdapter extends RecyclerView.Adapter<MyViewHolder> {
        // 数据
        private List<String> list;
        // 上下文
        private Context context;
    
        public SimpAdapter(List<String> list, Context context) {
            this.list = list;
            this.context = context;
        }
    
        @Override
        public int getItemCount() {
            // TODO Auto-generated method stub
            return list.size();
        }
    
        // 绑定holder,进行设置
        @Override
        public void onBindViewHolder(MyViewHolder holder, int pos) {
            holder.tv.setText(list.get(pos));
    
        }
    
        // 创建holder
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup arg0, int arg1) {
            // 引用布局
            View view = View.inflate(context, R.layout.item_text, null);
            MyViewHolder holder = new MyViewHolder(view);
            return holder;
        }
    
    }
    
    class MyViewHolder extends ViewHolder {
        TextView tv;
    
        // 在构造方法里初始化
        public MyViewHolder(View view) {
            super(view);
            tv = (TextView) view.findViewById(R.id.tv_show);
        }
    
    }

    要设置分割线的话需要一个继承RecyclerView.ItemDecoration的类。

    package com.example.recycleview;
    
    /*
     * Copyright (C) 2014 The Android Open Source Project
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *      http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     */
    
    import android.content.Context;
    import android.content.res.TypedArray;
    import android.graphics.Canvas;
    import android.graphics.Rect;
    import android.graphics.drawable.Drawable;
    import android.support.v7.widget.LinearLayoutManager;
    import android.support.v7.widget.RecyclerView;
    import android.util.Log;
    import android.view.View;
    
    /**
     * This class is from the v7 samples of the Android SDK. It's not by me!
     * <p/>
     * See the license above for details.
     */
    public class DividerItemDecoration extends RecyclerView.ItemDecoration
    {
    
        private static final int[] ATTRS = new int[] { android.R.attr.listDivider };
    
        public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL;
    
        public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL;
        
        
    
        private Drawable mDivider;
    
        private int mOrientation;
    
        public DividerItemDecoration(Context context, int orientation)
        {
            final TypedArray a = context.obtainStyledAttributes(ATTRS);
            mDivider = a.getDrawable(0);
            a.recycle();
            setOrientation(orientation);
        }
    
        public void setOrientation(int orientation)
        {
            if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST)
            {
                throw new IllegalArgumentException("invalid orientation");
            }
            mOrientation = orientation;
        }
    
        @Override
        public void onDraw(Canvas c, RecyclerView parent)
        {
            Log.v("recyclerview - itemdecoration", "onDraw()");
             if (mOrientation == VERTICAL_LIST) {
                    drawVertical(c, parent);
                } else {
                    drawHorizontal(c, parent);
                }
        }
    
        public void drawVertical(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);
                android.support.v7.widget.RecyclerView v = new android.support.v7.widget.RecyclerView(
                        parent.getContext());
                final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child
                        .getLayoutParams();
                final int top = child.getBottom() + params.bottomMargin;
                final int bottom = top + mDivider.getIntrinsicHeight();
                mDivider.setBounds(left, top, right, bottom);
                mDivider.draw(c);
            }
        }
    
        public void drawHorizontal(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 + mDivider.getIntrinsicHeight();
                mDivider.setBounds(left, top, right, bottom);
                mDivider.draw(c);
            }
        }
    
        @Override
        public void getItemOffsets(Rect outRect, int itemPosition,
                RecyclerView parent)
        {
            if (mOrientation == VERTICAL_LIST)
            {
                outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());
            } else
            {
                outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);
            }
        }
    }

    布局文件

    <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="com.example.recycleview.MainActivity" >
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </android.support.v7.widget.RecyclerView>
    
    </RelativeLayout>
    <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="100dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:background="#1000">
    
        <TextView
            android:id="@+id/tv_show"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="20sp"
            android:gravity="center" />
    
    </RelativeLayout>
  • 相关阅读:
    微服务安全(二)OAuth 2.0
    微服务安全(一)
    Spring Security 学习+实践
    Dubbo 学习(二)服务注册与发现
    Dubbo 学习(一)
    Spring Cloud Hystrix 学习(三)请求合并
    Spring Cloud Hystrix 学习(二)熔断与降级
    Spring Cloud Hystrix 学习(一)
    Spring Cloud Gateway 学习+实践
    Spring Cloud Zuul 学习+实践
  • 原文地址:https://www.cnblogs.com/84126858jmz/p/5225411.html
Copyright © 2011-2022 走看看