-
RecyclerView能干什么?查看全部
-
recyclerView的数据刷新方法不是使用notifyDataSetChange而是使用notifyItemInserted查看全部
-
总结 如图,简单明了 说明: 自己的实现:https://github.com/xzhang76/RecyclerViewDemo 1.每一条提交对应一个小节 2.StaggeredGridView对应的Adapter在实现点击监听时不需要专门设置监听回调 因为它是继承来的,直接调用父类onBindViewHolder()就行了 super.onBindViewHolder(holder, position); 3.hyman的另外两个博文,第一个比较基础 Android RecyclerView 使用完全解析 体验艺术般的控件 http://blog.csdn.net/lmj623565791/article/details/45059587 Android 自定义RecyclerView 实现真正的Gallery效果 http://blog.csdn.net/lmj623565791/article/details/38173061查看全部
-
添加点击事件 1.bug 添加一个item后会发现position的顺序不会更新,解决方法在Adatper设置点击事件时使用 holder.itemView.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int layoutPosition = holder.getLayoutPosition(); onItemClickListener.onItemClick(holder.itemView, layoutPosition); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { public boolean onLongClick(View v) { int layoutPosition = holder.getLayoutPosition(); onItemClickListener.onItemLongClick(holder.itemView, layoutPosition); return false; } }); 点击时具体的实现还是放在Activity中 2.为点击事件设置点击时的颜色变化 (1)在每个item布局中设置点击时的背景色 android:background="@drawable/item_bg" (2)item_bg.xml <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/item_pressed"></item> <item android:drawable="@color/item_normal" ></item> </selector> 注意颜色不能直接写#adbcedf这样的方法,只能在color.xml中定义才行查看全部
-
为item添加点击监听回调 1.思路 RecyclerView相关类中没有为item点击设置任何默认的接口,所以要自己实现 这里是在Adapter实现的。 2.Adapter (1)相关监听接口和设置回调的方法 public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } private OnItemClickListener onItemClickListener; //接口实例 public void setOnItemClickListener(OnItemClickListener listener) { this.onItemClickListener = listener; } (2)在onBindViewHolder()设置点击事件,如图 holder.itemView.setOnClickListener(new View.OnClickListener() { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { 3.在Activity中为Adapter设置点击监听回调,重写点击时的实现 mAdapter.setOnItemClickListener(new MyRecyclerViewAdapter.OnItemClickListener() { public void onItemClick(View view, int position) { Toast.makeText(...).show(); } public void onItemLongClick(View view, int position) { Toast.makeText(...).show(); } });查看全部
-
设置添加/删除item时的动画 1.思路 添加/删除item的接口实现在Adapter中,在Activity中需要为RecyclerView设置动画 可以使用默认的动画,也可以使用第三方开源类 https://github.com/gabrielemariotti/RecyclerViewItemAnimators 2.添加/删除的实现 public void addItem(int position) { mDatas.add(position, "Inserted one"); notifyItemInserted(position); //注意不是notifyDataSetChanged() } public void deleteItem(int position) { mDatas.remove(position); notifyItemRemoved(position); } 3.还是在Activity中通过menu添加两个添加/删除的按钮action case R.id.action_add: mAdapter.addItem(1); break; case R.id.action_delete: mAdapter.deleteItem(1); break; 4.设置动画 mRecyclerView.setItemAnimator(new SlideInOutLeftItemAnimator(mRecyclerView)); 默认的动画可以使用DefaultItemAnimator() 第三方开源动画类添加方法build.gradle repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } } dependencies { compile 'com.github.gabrielemariotti.recyclerview:recyclerview-animators:0.3.0-SNAPSHOT@aar' }查看全部
-
秒变瀑布流StaggeredView 1.思路 瀑布流每个Item的高度需要是随机的,所以最好是重新实现它的Activity以及Adapter 2.Adapter 因为只需要改一个item高度,所以直接继承前面的adapter就行了 public class StaggeredViewAdapter extends MyRecyclerViewAdapter { (1)构造函数中为每个item生成随机高度 mItemHeight = new ArrayList<Integer>(); for (int i = 0; i < datas.size(); i ++){ mItemHeight.add((int) (100+Math.random()*300)); } (2)重写onBindViewHolder(),设定item高度 public void onBindViewHolder(MyViewHolder holder, int position) { super.onBindViewHolder(holder, position); ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); lp.height = mItemHeight.get(position); holder.itemView.setLayoutParams(lp); } 3.Acitivity中和前面的一样 mAdapter = new StaggeredViewAdapter(this, mDatas); mRecyclerView.setAdapter(mAdapter); //为RecyclerView设置布局管理,StaggeredGridView StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(staggeredGridLayoutManager);查看全部
-
变身GridView(垂直/水平) 1.垂直/水平GridVie都是通过LayoutManager实现的,这里在menu添加多个action 有关参数的设置,自己去查API吧 public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); switch (id) { case R.id.action_listview: mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); break; case R.id.action_gridview: mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3)); break; case R.id.action_hor_gridview: mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(5, StaggeredGridLayoutManager.HORIZONTAL)); break; case R.id.action_stag_gridview: Intent intent = new Intent(this, StaggeredViewActivity.class); startActivity(intent); break; 最好一个是StaggeredView单独实现的Activity 2.问题 (1)不再使用分割线,因为不太好控制,尤其是GridView会出现画两遍的问题 在每个item布局里直接使用margin来实现分割线 android:layout_margin="3dp" (2)修改item的宽度来调整水平GridView的item显示 <TextView android:layout_width="72dp" android:layout_height="match_parent"查看全部
-
实现ListView 4.ViewHolder构造函数需要为view赋值 class MyViewHolder extends RecyclerView.ViewHolder { public MyViewHolder(View view) { super(view); textView = (TextView) view.findViewById(R.id.id_textview); } } 5.在MainActivity中需要为RecyclerView设置Adapter、LayoutManager mAdapter = new MyRecyclerViewAdapter(this, mDatas); mRecyclerView.setAdapter(mAdapter); //设置布局管理 mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL);); 6.为item设置分割线 (1)第三方开源类DividerItemDecoration RecyclerView.ItemDecoration是一个抽象类,必须自己写一个实现类 http://blog.csdn.net/lmj623565791/article/details/45059587 DividerItemDecoration extends RecyclerView.ItemDecoration { (2)自定义颜色渐变的分割线divider.xml <shape android:shape="rectangle" > <gradient android:centerColor= startColor= endColor= android:type="linear" /> <size android:height="4dp"/> </shape> (3)MainActivity设置分割线 mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST););查看全部
-
实现ListView AS里面要添加RecyclerView的库,需要找V7版本的,如图 1.思路 布局使用RecyclerView,然后为其创建一个Adapter,使用LinearLayoutManager设置成ListView 使用github的开源类DividerItemDecoration来实现自定义item之间的分割线 2.布局 <android.support.v7.widget.RecyclerView …… 2.RecyclerView mRecyclerView = findViewById(R.id.id_recyclerview); 3.创建Adapter MyRecyclerViewAdapter extends RecyclerView.Adapter<MyViewHolder> { (1)构造函数 public MyRecyclerViewAdapter(Context context, List<String> datas) { this.mContext = context; this.mDatas = datas; this.mInflater = LayoutInflater.from(context); } (2)onCreateViewHolder需要inflate布局文件并返回ViewHolder public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = mInflater.inflate(R.layout.simple_textview, parent, false); MyViewHolder viewHolder = new MyViewHolder(view); return viewHolder; } (3)onBindViewHolder()为ViewHolder的view初始化 public void onBindViewHolder(final MyViewHolder holder, final int position) { holder.textView.setText(mDatas.get(position)); }查看全部
-
关于RecyclerView 1.整体上看RecyclerView架构,提供了一种插拔式的体验,高度的解耦,异常的灵活,通过设置它提供的不同LayoutManager,ItemDecoration , ItemAnimator实现令人瞠目的效果。 (1)想要控制其显示的方式,通过布局管理器LayoutManager (2)想要控制Item间的间隔(可绘制),通过ItemDecoration (3)想要控制Item增删的动画,通过ItemAnimator (4)想要控制点击、长按事件,自己写...... 2.使用RecyclerView必须要用到如下类或组件 ViewHolder(就像ListView中使用一下,用来装载每个Item的各个view) LayoutManager(用来控制显示的方式,ListView、GridView、StaggeredView) ItemDecoration(各个item之间的分割线) ItemAnimator(添加/删除时的动画)查看全部
-
RecyclerView相关的重要类: 1.Adapter 2.ViewHolder 3.LayoutManager 4.ItemDecoration 5.ItemAnimator查看全部
-
RecyclerView和ListView之间的区别: 1.不关心Item是否显示在正确的位置,通过LayoutManager来显示 2.不关心Item键如何分隔,通过itemDecoration来显示 3.不关注item增加与删除的动画效果,itemAnimator来显示 4.recyclerView仅仅关注如何回收与复用view查看全部
-
adapter 的区别查看全部
-
第一张ppt查看全部
举报
0/150
提交
取消