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

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

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(); //通知刷新

最后统一看下效果吧:

RecycleView 中默认选择第一个 item,点击第 2 个 item 时改变其字体样式,其余的 item 的字体样式恢复默认 代码如下: 主要的参数是 mPosition public class SubjectListAdapter extends RecyclerView.Adapter<SubjectListAdapter.MyViewHolder> { private List<String> dataList;
1.listview的滚栋直接调用ListView.setSelection(position); 而recycleview的滚栋则是调用的是 LinearLayoutManager对象的方法例如: linearLayoutManager.scrollToPositionWithOffset(position,0);才能滚栋到界面上,
原文链接:https://developer.android.com/guide/topics/ui/layout/recyclerviewRecyclerView来创建列表视图 如果你的应用需要显示一个滚动的列表视图,并且这个列表包含了大量数据(或一些频繁更改的数据,则可以按照本篇文章的指引来使用RecyclerView。 如果你想创建一个卡片列表,如图2 所示,你也可以使用Car...
// 传入点击的位置 public void setThisPosition(int thisPosition) { this.thisPosition = thisPosition; notifyDataSetChanged(); @NonN
转自:https://blog.csdn.net/chengfu116/article/details/75291344RecyclerView单选Adapter类public class SingleAdapter extends RecyclerView.Adapter { private List&lt;String&gt; datas; private int sele...
在Adapter中添加以下代码: @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { ContactClassifyItem item = mItemList.get(position); if(ite 在查看RecyclerView的官方文档的时候发现了这个recyclerview-selection库,经过测试感觉功能挺好的,省去了自己需要编写大量多选功能的代码,官方文档的guide又不是太清晰,这篇文章仅仅作为简单的记录。 如何将多个选择添加到Android RecyclerView(Kotlin) RecyclerView-Selection(Kotlin) github示...
项目中发现在在切换fragment(Fragment中带有RecyclerView)时,recyclerView的焦点总是默认在第一个item上,并且带有选中状态,事实上我并没有设置item的选中状态。多次测试发现,只在Android8.0(MIUI不会出现)以上才会出现这样的问题。 查看官方文档,发现如下内容: 现在,如果您没有为View对象(前景或背景图片)定义任何焦点状态颜色,框架会为Vi...
listviewrecyclerview都是Android中常用的列表控件,用于展示大量数据。它们的主要区别在于: 1. 数据加载方式:listview一次性将所有数据加载到内存中,而recyclerview则是通过adapter逐个加载数据,可以实现懒加载,减少内存占用。 2. 布局方式:listview只支持垂直布局,而recyclerview支持垂直、水平、网格等多种布局方式。 3. 功能扩展:recyclerview支持更多的功能扩展,如ItemDecoration、ItemAnimator等,可以实现更丰富的列表效果。 总的来说,如果需要展示大量数据且需要实现复杂的列表效果,建议使用recyclerview。如果数据量较小,且只需要简单的列表展示,可以使用listview