• Android RecyclerView


    RecyclerView是一个比ListView更灵活高效的适配器类型空间,使用它需要一个LayoutManager和Adapter进行展示,RecyclerView提供了三种布局管理器:

    1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果

    2、GridLayoutManager:网格布局管理器,支持水平和垂直效果

    3、StaggeregGridLayoutManager:分布型管理器,瀑布流效果

    recyclerView = (RecyclerView) findViewById(R.id.recycler);
    //设置布局管理器
    recyclerView.setLayoutManager(layout);
    //设置adapter
    recyclerView.setAdapter(adapter);
    //设置Item增加、移除动画
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    //添加分割线
    recyclerView.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.HORIZONTAL_LIST));

    RecyclerView的使用:

    1、应用RecyclerView依赖包:

    compile 'com.android.support:recyclerview-v7:23.2.1'

    2、在xml布局中声明,在Java代码中初始化

    3、设置布局管理器

    4、创建适配器、数据源,绑定适配器

    5、RecyclerView的点击事件需要自己设置。

    RecyclerView是一个比ListView更灵活高效的适配器类型空间,使用它需要一个LayoutManager和Adapter进行展示,RecyclerView提供了三种布局管理器:

    1、LinearLayoutManager:线性布局管理器,支持水平和垂直效果

    2、GridLayoutManager:网格布局管理器,支持水平和垂直效果

    3、StaggeregGridLayoutManager:分布型管理器,瀑布流效果

    RecyclerView的使用:

    1、应用RecyclerView依赖包:

    compile 'com.android.support:recyclerview-v7:23.2.1'

    2、在xml布局中声明,在Java代码中初始化

    3、设置布局管理器

    4、创建适配器、数据源,绑定适配器

    5、RecyclerView的点击事件需要自己设置。

    示例:

    xml:activity_recycler

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/recycler"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    list_r1_item
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    
        <TextView
            android:id="@+id/tvR1"
            android:layout_width="match_parent"
            android:layout_height="30dp" />
    </LinearLayout>

    java

    public class RecyclerActivity extends AppCompatActivity {
        private RecyclerView recyclerView;
        private MyRecyclerAdapter adapter;
        private List<String> mDatas;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_recycler);
    
            recyclerView = (RecyclerView) findViewById(R.id.recycler);
            initData();
            adapter = new MyRecyclerAdapter(RecyclerActivity.this, mDatas);
            LinearLayoutManager layoutManager = new LinearLayoutManager(this);
            recyclerView.setLayoutManager(layoutManager);
            layoutManager.setOrientation(OrientationHelper.VERTICAL);
            recyclerView.setAdapter(adapter);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            adapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
                @Override
                public void onClick(int position) {
                    Toast.makeText(RecyclerActivity.this, "onClick", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onLongClick(int position) {
                    Toast.makeText(RecyclerActivity.this, "onLongClick", Toast.LENGTH_SHORT).show();
                }
            });
        }
    
        private void initData() {
            mDatas = new ArrayList<String>();
            for (int i = 0; i < 40; i++) {
                mDatas.add("item" + i);
            }
        }

    adapter:

    public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> {
    
        private List<String> mDatas;
        private Context context;
        private LayoutInflater inflater;
    
        public MyRecyclerAdapter(Context context, List<String> datas) {
            this.context = context;
            this.mDatas = datas;
            inflater = LayoutInflater.from(context);
        }
    
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            View view = inflater.inflate(R.layout.list_r1_item, parent, false);
            MyViewHolder holder = new MyViewHolder(view);
            return holder;
        }
    
        @Override
        public void onBindViewHolder(final MyViewHolder holder, final int position) {
            holder.tv.setText(mDatas.get(position));
    
            //点击事件
            if (mOnClickListener!=null){
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        mOnClickListener.onClick(position);
                    }
                });
                holder. itemView.setOnLongClickListener( new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        mOnClickListener.onLongClick(position);
                        return false;
                    }
                });
            }
            }
    
        @Override
        public int getItemCount() {
            return mDatas.size();
        }
    
        public class MyViewHolder extends RecyclerView.ViewHolder {
            TextView tv;
    
            public MyViewHolder(View view) {
    
                super(view);
                tv = (TextView) view.findViewById(R.id.tvR1);
            }
        }
    
        //给RecyclerView添加点击事件
        public interface OnItemClickListener{
            void onClick(int position);
            void onLongClick(int position);
        }
        private OnItemClickListener mOnClickListener;
        public void setOnItemClickListener(OnItemClickListener onItemClickListener){
            this.mOnClickListener = onItemClickListener;
        }
    }

     RecyclerView的点击事件需要自己设置,方法:

    1.在Adapter中添加

    //给RecyclerView添加点击事件
        public interface OnItemClickListener{
            void onClick(int position);
            void onLongClick(int position);
        }
        private OnItemClickListener mOnClickListener;
        public void setOnItemClickListener(OnItemClickListener onItemClickListener){
            this.mOnClickListener = onItemClickListener;
        }

    再在onBindViewHolder方法中添加

    //点击事件
            if (mOnClickListener!=null){
                holder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        mOnClickListener.onClick(position);
                    }
                });
                holder. itemView.setOnLongClickListener( new View.OnLongClickListener() {
                    @Override
                    public boolean onLongClick(View v) {
                        mOnClickListener.onLongClick(position);
                        return false;
                    }
                });

    在Activity中添加

    adapter.setOnItemClickListener(new MyRecyclerAdapter.OnItemClickListener() {
                @Override
                public void onClick(int position) {
                    Toast.makeText(RecyclerActivity.this, "onClick", Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void onLongClick(int position) {
                    Toast.makeText(RecyclerActivity.this, "onLongClick", Toast.LENGTH_SHORT).show();
                }
            });

    即添加点击事件完成。

  • 相关阅读:
    权限管理系统准备
    java启动线程时 extends与implements的一个差异
    spring中使用quartz时注入时出现的错误
    bat执行java程序 good
    bat下执行java程序报错处理
    SQLite.dll在xp中部署时的报错处理
    hdu 4277 USACO ORZ (dfs暴搜+hash)
    Java实现 蓝桥杯 算法训练 动态数组使用
    Java实现 蓝桥杯 算法训练 动态数组使用
    Java实现 蓝桥杯 算法训练 动态数组使用
  • 原文地址:https://www.cnblogs.com/chhom/p/6062115.html
Copyright © 2020-2023  润新知