ListView和RecyclerView默认记住第几项总结

ListView和RecyclerView默认记住第几项总结

前言

项目中使用ListView或者RecyclerView要记住默认的第几项或者是选中后背景需要改成自己需要的背景,这个时候查询了网上的一些资料,说ListView是很好实现的,因为他默认的有一个setSelection(position)的方法,但是这个和自己想要的效果还是有些区别的,结合网上的一些资料,还有自己的一些实践,来看下怎么完成的吧,有些说了RecyclerView实现有些麻烦,但是我这种实现和ListView是一样的。来看下吧

同步更新CSDN

http://blog.csdn.net/wuyinlei/article/details/52576521

ListView实现

  • 首先我是在adapter里面定义一个int变量用来记录是第几项被选中(还有就是默认的第几项选中)
    //默认是第几项
    private int mPosition = 3;

    public void setPosition(int position) {
        mPosition = position;
    }

  • 然后就在getView(int i, View view, ViewGroup viewGroup)方法中通过判断要展示的item的位置和这个位置是否相等,如果相等就设置自己想要的背景,如果不相等,那就是默认的背景(自己设置)。
  if (mPosition == i) {
            holder.mReRe.setBackground(mContext.getResources().getDrawable(R.drawable.spinner_ab_focused_example));
        } else {
            holder.mReRe.setBackground(mContext.getResources().getDrawable(R.drawable.spinner_ab_disabled_example));
        }
  • 最后在Activity或者fragment里面进行如下使用
   mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                mAdapter.setPosition(i);  //把当前点击的位置传递过去
                mAdapter.notifyDataSetChanged();  //通知listview刷新UI
            }
        });

RecyclerView实现

这个实现和Listview实现的步骤是一样的,只不过RecyclerView的点击事件需要自己去写。

  • 首先设置在adapter里面定义int变量记录
 //默认第几项
    private int mPosition = 0;

    public void setPosition(int position) {
        mPosition = position;
    }
  • 然后在onBindViewHolder(ViewHolder holder, int position)方法中通过判断要展示的item的位置是否相等,如果相等就设置自己想要的背景,如果不相等,那就是默认的背景(自己设置)
 if (mPosition == position){
            holder.mReRe.setBackground(holder.itemView.getContext().getResources().getDrawable(R.drawable.spinner_ab_focused_example));
        } else {
            holder.mReRe.setBackground(holder.itemView.getContext().getResources().getDrawable(R.drawable.spinner_ab_disabled_example));
        }
  • 设置点击事件(adapter里面)
  private OnItemClickListener mOnItemClickListener;

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
        mOnItemClickListener = onItemClickListener;
    }

    public interface OnItemClickListener {
        void onItemClick(View view, int position, String s);
    }
  • 最后在Activity或者fragment里面进行如下使用
 mAdapter.setOnItemClickListener(new RecyclerViewAdapter.OnItemClickListener() {
            @Override
            public void onItemClick(View view, int position, String s) {
                mAdapter.setPosition(position); //传递当前的点击位置
                mAdapter.notifyDataSetChanged(); //通知刷新
            }
        });

最后统一看下效果吧:


最后附上git地址

https://github.com/wuyinlei/ListviewOrRecyclerviewMemoryposition

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容