RecyclerView详解
来源:互联网 发布:怎么学粤语 知乎 编辑:程序博客网 时间:2024/05/16 14:01
1.android5.0重要控件的介绍
①RecyclerView介绍:
替换listview的盛装数据的控件,运用好这个控件能够很多的避免listview与scrollview的滚动冲突,选择RecyclerView性能更优,listview能做的事情,RecyclerView样样都会,甚至更多。
②FloatingActionButton介绍
它是一种带有悬浮效果的控件,可以作为提示,编辑,分享的作用。
③Snack介绍
更好的替代了Toast的功效,是一种不错的弹出效果的控件。
2.具体用法
添加依赖:
compile 'com.android.support:design:24.2.1'
①定义RecyclerView,FloatingActionButton控件
<android.support.v7.widget.RecyclerView android:id="@+id/recyclerView" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" app:layout_behavior="@string/appbar_scrolling_view_behavior" /><!-- 必须把anchor设置为CoordinatorLayout布局的id--><android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="16dp" android:src="@mipmap/icon" app:backgroundTint="#FF4081" app:borderWidth="0dp" app:elevation="6dp" app:fabSize="normal" app:layout_anchor="@id/coordinator_layout" app:layout_anchorGravity="bottom|right" app:pressedTranslationZ="12dp" app:rippleColor="#a6a6a6" />
②为RecyclerView设置动画
final RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);mRecyclerView.setItemAnimator(new DefaultItemAnimator());③为RecyclerView设置布局管理器
1.线性布局:
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);2.瀑布流布局:
mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL));④设置adpter:自定义adapter extends RecyclerView.Adapter
public class MyRecyclerAdapter extends RecyclerView.Adapter
⑤重写三个重载函数
1.onCreateViewHolder
@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(context).inflate(R.layout.item,parent,false); MyViewHolder viewHolder = new MyViewHolder(view); //为每个item注册点击事件 view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mListener != null) { //注意这里使用getTag方法获取数据 mListener.ItemClickListener(v,(String)v.getTag()); } } }); return viewHolder;}
在这里,创建真正的viewholder;
2.onBindViewHolder
@Overridepublic void onBindViewHolder(final RecyclerView.ViewHolder holder, int position) { ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();//得到item的LayoutParams布局参数 params.height = heights.get(position);//把随机的高度赋予item布局 holder.itemView.setLayoutParams(params);//把params设置给item布局 ((MyViewHolder)holder).mTv.setText(lists.get(position));//为控件绑定数据 if(mListener!=null){//如果设置了监听那么它就不为空,然后回调相方应的法 holder.itemView.setTag(lists.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mListener.ItemClickListener(view,"dianji"); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition();//得到当前点击item的位置pos mListener.ItemLongClickListener(holder.itemView,pos);//把事件交给我们实现的接口那里处理 return true; } }); }}
为RecyclerView的每个item设置了点击事件,并且为view中的子view设置值;
@Overridepublic int getItemCount() { return lists.size();}
3.为RecyclerView设置点击事件
①申明点击的接口
public interface OnRecyclerViewItemClickListener{ void ItemClickListener(View view, String data); void ItemLongClickListener(View view, int postion);}②创建点击的静态方法
public static void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { mListener = listener;}注意这个方法必须保证是静态。
③申明同上同类型的静态listener
private static OnRecyclerViewItemClickListener mListener;④在onBindViewHolder中通过listener调用点击事件
if(mListener!=null){//如果设置了监听那么它就不为空,然后回调相方应的法 holder.itemView.setTag(lists.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { mListener.ItemClickListener(view,"dianji"); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition();//得到当前点击item的位置pos mListener.ItemLongClickListener(holder.itemView,pos);//把事件交给我们实现的接口那里处理 return true; } });}
4.主代码展示
public class MainActivity extends ActionBarActivity { private CoordinatorLayout mCoordinatorLayout; MyRecyclerAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); mCoordinatorLayout = (CoordinatorLayout) findViewById(R.id.coordinator_layout); final RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); List<String> lists = new ArrayList<>(); for (int i = 0; i < 100; i++) { lists.add(i + ""); } LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, StaggeredGridLayoutManager.VERTICAL)); adapter = new MyRecyclerAdapter(this, lists); mRecyclerView.setAdapter(adapter); MyRecyclerAdapter.setOnItemClickListener(new MyRecyclerAdapter.OnRecyclerViewItemClickListener() { @Override public void ItemClickListener(View view, String data) { //Toast.makeText(MainActivity.this,"dainjile",Toast.LENGTH_SHORT).show(); Snackbar.make(mCoordinatorLayout,"点击了",Snackbar.LENGTH_SHORT).show(); } @Override public void ItemLongClickListener(View view, int postion) { } }); final FloatingActionButton mFloatingActionButton = (FloatingActionButton) findViewById(R.id.fab); mFloatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mRecyclerView.scrollToPosition(0); } }); } @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.snackbar_item: //把mCoordinatorLayout传给Snackbar Snackbar.make(mCoordinatorLayout, "Snackbar", Snackbar.LENGTH_SHORT).show(); break; } return super.onOptionsItemSelected(item); }}这里,为FloatingActionButton设置了一个关于RecyclerView的item定位的点击事件
final FloatingActionButton mFloatingActionButton = (FloatingActionButton) findViewById(R.id.fab); mFloatingActionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mRecyclerView.scrollToPosition(0); } });这里的Snack的用法如下,很简单,它不需要在xml文件中定义
Snackbar.make(mCoordinatorLayout, "Snackbar", Snackbar.LENGTH_SHORT).show();注意:第一个参数为Snack要显示的viewgroup!!!
效果图:
好了,今天的分享就到此为止;在实战中学习,在实战中精进,我是张星,欢迎大家的关注!
1 0
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- recyclerview详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- RecyclerView详解
- First RecyclerView (RecyclerView使用详解)
- RecyclerView 的使用详解
- Android RecyclerView 使用详解
- RecyclerView简单详解
- RecyclerView分割线详解
- WPS文献自动索引
- 怎样从外网访问内网服务器
- Java:fail-safe 机制
- 387. First Unique Character in a String#2(Done)
- hadoop框架下各类软件介绍
- RecyclerView详解
- 为caffe添加新的层
- 浓浓一笔,圈住2016
- 流水作业调度问题
- 人脸识别(Face Recognition)相关
- getBoundingClientRect的用法
- CSS学习Day05
- Mapreduce基本介绍(一)
- 对称加密与公钥加密(下)