使用RecyclerView绑定点击事件
来源:互联网 发布:mac上好用的tex编辑器 编辑:程序博客网 时间:2024/05/21 06:35
RecyclerView在设置点击事件时 如果不使用notifyDataSetChanged();来通知界面更新的话是不会主动调用onBindViewHolder(ViewHolder holder,int position)这个方法.而绑定点击事件需要在这里进行绑定并且将position传入进去进行相应的操作.如果我们进行移动,删除,添加,但是没有调用该方法的话,点击绑定的position就会和界面真正的position不一样.使用notifyDataSetChanged();会重新执行onBindViewHolder()所以不会出现错乱现象.但是RecyclerView.Adapter提供了以下几个通知界面更新的方法:
- notifyItemChanged(int position)
- notifyItemRangeChanged(int positionStart, int itemCount)
- notifyItemInserted(int position)
- notifyItemRangeInserted(int positionStart, int itemCount)
- notifyItemRemoved(int position)
- notifyItemRangeRemoved(int positionStart, int itemCount)
- notifyItemMoved(int fromPosition, int toPosition)
就是通知item改变,删除,添加和移动给Recyclerview,RecyclerView会做出相应的动画效果来显示这个状态的变更.使用这几个方法通知界面变更不会调用onBindViewHolder这个方法,不过我又希望能有动画效果.所以直接通过onBindViewHolder传入的posiition是不能用了有没有什么方法可以获得子item的posiition呢?然后我发现RecyclerView提供下面这个方法:
public int getChildAdapterPosition(View child) { final ViewHolder holder = getChildViewHolderInt(child); return holder != null ? holder.getAdapterPosition() : NO_POSITION; }
所以使用ViewHolder.getAdapterPosition()获取位置信息就好了.
class RecyclerAdapter extends RecyclerView.Adapter<ViewHolder>{ private LinkedList<String> temp; RecyclerAdapter(LinkedList<String> list){ temp = list; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { mRecyclerView = (RecyclerView) parent; View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recycler_view,parent,false); ViewHolder holder = new ViewHolder(view); return holder; } @Override public void onBindViewHolder(final ViewHolder holder, int position) { holder.mImageView.setImageResource(R.mipmap.ic_launcher); holder.mTextView.setText(names.get(position)); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int index = holder.getAdapterPosition();//获取item在adapter中的位置 temp.add(index+6,temp.get(index)); temp.remove(index); notifyItemMoved(index, index + 5); return false; } }); } @Override public int getItemCount() { return temp.size(); } } class ViewHolder extends RecyclerView.ViewHolder{ private ImageView mImageView; private TextView mTextView; private View itemView; public ViewHolder(View itemView) { super(itemView); this.itemView = itemView; mImageView = (ImageView) itemView.findViewById(R.id.image); mTextView = (TextView) itemView.findViewById(R.id.text); } }
0 0
- 使用RecyclerView绑定点击事件
- RecyclerView的使用(二)点击事件
- RecyclerView的使用(包含点击事件)
- recyclerview点击事件以及toolbar使用
- RecyclerView 使用 点击事件和长按
- RecyclerView的使用 以及RecyclerView的自定义点击事件
- Android中RecyclerView使用,RecyclerView-Item点击事件设置
- RecyclerView 点击事件
- RecyclerView点击事件
- RecyclerView的点击事件
- Recyclerview点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView的点击事件
- RecyclerView 点击事件
- RecyclerView 的点击事件!
- RecyclerView点击事件处理
- 如何利用Bacon 2D来在Ubuntu平台上制作自己的游戏
- 远程登录方式
- git对工作区,暂存区,分支的理解。
- soapui中文操作手册(四)----MOCK服务
- android scrollview嵌套girdview显示效果不理想的问题解决
- 使用RecyclerView绑定点击事件
- 欢迎使用CSDN-markdown编辑器
- webservice
- oracle 登录时提示无监听登陆不进去
- PhpStorm+xdebug搭建php远程调试环境
- logback 配置详解
- HTTP之-网址中的问号
- 2015年秋季腾讯校园招聘开发岗笔试题 四道大题之一
- H-Index