横向recyclerView程序自动切换并高亮选中item
来源:互联网 发布:基坑监测数据处理软件 编辑:程序博客网 时间:2024/06/11 16:27
思路:
Adapter实现点击和高亮事件,然后在recyclerView滚动到对应位置并performClick:
mRecyclerView.scrollToPosition(index);mRecyclerView.postDelayed(new Runnable(){ @Override public void run() { if(mRecyclerView.findViewHolderForAdapterPosition(index)!=null ) { mRecyclerView.findViewHolderForAdapterPosition(index).itemView.performClick(); } }},50);一定要用postDelayed,不然切换到屏幕外的item会报错null,参考:
http://stackoverflow.com/questions/32836844/android-recyclerview-findviewholderforadapterposition-returns-null
其中adapter代码如下:
public class PlayerScoreAdapter extends RecyclerView.Adapter<PlayerScoreAdapter.ViewHolder> /*implements View.OnClickListener*/{ private Player[] players; private Context context; private int selectedPos = 0; public PlayerScoreAdapter(Player[] players, Context context) { this.players = players; this.context = context; } private OnRecyclerViewItemClickListener mOnItemClickListener = null; //define interface public interface OnRecyclerViewItemClickListener { void onItemClick(View view , String data); } //创建新View,被LayoutManager所调用 @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_player_score, viewGroup, false); ViewHolder vh = new ViewHolder(view); //将创建的View注册点击事件// view.setOnClickListener(this); return vh; } //将数据与界面进行绑定的操作 @Override public void onBindViewHolder(final ViewHolder viewHolder, final int position) { viewHolder.itemView.setSelected(selectedPos == position); // Handle item click and set the selection// viewHolder.itemView.setFocusable(true); ImageView imageView = (ImageView)viewHolder.itemView.findViewById(R.id.head_image); if(selectedPos == position){ imageView.setImageAlpha(255); }else{ imageView.setImageAlpha(100); } viewHolder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Redraw the old selection and the new notifyItemChanged(selectedPos); selectedPos = position; notifyItemChanged(selectedPos);// notifyItemRangeChanged(0, players.length); mOnItemClickListener.onItemClick(v,(String)v.getTag()); } }); Glide.with(context).load(players[position].getHeadImg()) .bitmapTransform(new CropCircleTransformation(context)) .crossFade(1000).error(R.mipmap.head_sample).into(viewHolder.mImageView); //将数据保存在itemView的Tag中,以便点击时进行获取 viewHolder.itemView.setTag(players[position].getName()); } /*@Override public void onClick(View v) { if (mOnItemClickListener != null) { //注意这里使用getTag方法获取数据 mOnItemClickListener.onItemClick(v,(String)v.getTag()); } }*/ public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) { this.mOnItemClickListener = listener; } //获取数据的数量 @Override public int getItemCount() { return players.length; } //自定义的ViewHolder,持有每个Item的的所有界面元素 public class ViewHolder extends RecyclerView.ViewHolder { public ImageView mImageView; public ViewHolder(View view){ super(view); mImageView = (ImageView) view.findViewById(R.id.head_image); } }}
1 0
- 横向recyclerView程序自动切换并高亮选中item
- Android ListView item 选中高亮显示
- Android ListView选中Item高亮
- 高亮listView的选中的item
- 【RecyclerView】 item不能横向充满的问题
- RecyclerView中item的选中效果
- DataGridView如何高亮选中一行并自动滚为当前行
- c# 自动填充的ComboBox,可以展开ComboBox并高亮选中的内容。
- CListCtrl设置选中某一item,高亮显示
- 最简便实现Android ListView选中item高亮显示
- 选中某一item,高亮显示(CListCtrl CTreeCtrl CListBox)
- Android ListView 设置选中item高亮状态
- Android ListView 高亮显示选中的item
- CListCtrl控件选中并高亮显示
- 自定义RecyclerView 支持 横向纵向,滑动删除Item
- ListView的item选中后保持选中时的高亮颜色。
- 关于Recyclerview自适应item宽高
- Android RecyclerView item选中放大被遮挡问题
- web前端框架总结
- 新闻网站爬虫设计
- 非比较排序---计数排序&基数排序
- spring cloud微服务框架 第一天
- SVProgressHUD会crash的处理方法
- 横向recyclerView程序自动切换并高亮选中item
- openwrt 安装 Mosquitto
- Highcharts, PHP制作实时更新的动态线性图
- java使用redis时,中文乱码问题
- Spring整合JMS(消息中间件)实例
- java SSM框架批量上传实现
- 算法总结(二)图
- iOS实现热修复的几种方案
- Android读取桌面安装的应用