RecyclerView列表吸附停靠效果

第一步,导入依赖

implementation 'com.android.support:recyclerview-v7:28.0.0'
implementation 'com.gavin.com.library:stickyDecoration:1.1.0'

第二步,

<android.support.v7.widget.RecyclerView
    android:id="@+id/recy"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v7.widget.RecyclerView>

第三步,自定义的bean类

public class City {
    private String name;
    private String province;
    private int icon;

    public City(String name, String province, int icon) {
        this.name = name;
        this.province = province;
        this.icon = icon;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getProvince() {
        return province;
    }

    public void setProvince(String province) {
        this.province = province;
    }

    public int getIcon() {
        return icon;
    }

    public void setIcon(int icon) {
        this.icon = icon;
    }
}

第四步 自己构造的数据

public class CityUtils {
    
    
    
    public  static List<City> getCityList(){
        List<City> dataList = new ArrayList<>();
         String FUJIAN="福建省";
        int FUJIAN_ICON=1;
        dataList.add(new City("福州",FUJIAN,FUJIAN_ICON));
        dataList.add(new City("厦门",FUJIAN,FUJIAN_ICON));
        dataList.add(new City("泉州",FUJIAN,FUJIAN_ICON));
        dataList.add(new City("宁德",FUJIAN,FUJIAN_ICON));
        dataList.add(new City("漳州",FUJIAN,FUJIAN_ICON));
        String ANHUI="安徽省";
        int ANHUI_ICON=2;
        dataList.add(new City("合肥",ANHUI,ANHUI_ICON));
        dataList.add(new City("芜湖",ANHUI,ANHUI_ICON));
        dataList.add(new City("蚌埠",ANHUI,ANHUI_ICON));
        dataList.add(new City("铜陵",ANHUI,ANHUI_ICON));
        dataList.add(new City("宿州",ANHUI,ANHUI_ICON));
        dataList.add(new City("淮北",ANHUI,ANHUI_ICON));
        dataList.add(new City("六安",ANHUI,ANHUI_ICON));
        dataList.add(new City("黄山",ANHUI,ANHUI_ICON));
        dataList.add(new City("阜阳",ANHUI,ANHUI_ICON));
        String ZHEJIANG="浙江省";
        int ZHEJIANG_ICON=3;
        dataList.add(new City("杭州",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("宁波",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("温州",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("嘉兴",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("绍兴",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("金华",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("湖州",ZHEJIANG,ZHEJIANG_ICON));
        dataList.add(new City("舟山",ZHEJIANG,ZHEJIANG_ICON));
        String JIANGSU="江苏省";
        int JIANGSU_ICON=4;
        dataList.add(new City("南京",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("苏州",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("徐州",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("南通",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("无锡",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("盐城",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("淮安",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("泰州",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("常州",JIANGSU,JIANGSU_ICON));
        dataList.add(new City("连云港",JIANGSU,JIANGSU_ICON));
        String SHANDONG="山东省";
        int SHANDONG_ICON=5;
        dataList.add(new City("济南",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("德州",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("青岛",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("莱芜",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("滨州",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("东营",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("泰安",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("曲阜",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("潍坊",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("日照",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("菏泽",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("枣庄",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("聊城",SHANDONG,SHANDONG_ICON));
        dataList.add(new City("淄博",SHANDONG,SHANDONG_ICON));
        String SHANXI="山西省";
        int SHANXI_ICON=4;
        dataList.add(new City("太原",SHANXI,SHANXI_ICON));
        dataList.add(new City("大同",SHANXI,SHANXI_ICON));
        dataList.add(new City("运城",SHANXI,SHANXI_ICON));
        dataList.add(new City("侯马",SHANXI,SHANXI_ICON));
        dataList.add(new City("长治",SHANXI,SHANXI_ICON));
        dataList.add(new City("吕梁",SHANXI,SHANXI_ICON));
        dataList.add(new City("永济",SHANXI,SHANXI_ICON));
        dataList.add(new City("临汾",SHANXI,SHANXI_ICON));
        dataList.add(new City("晋城",SHANXI,SHANXI_ICON));
        dataList.add(new City("忻州",SHANXI,SHANXI_ICON));

        return dataList;
    };
}

第五步,MainActivity

public class MainActivity extends AppCompatActivity {

    private RecyclerView recy;
    private List<City> dataList=new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recy = findViewById(R.id.recy);

        dataList.addAll(CityUtils.getCityList());
        LinearLayoutManager manager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
        recy.setLayoutManager(manager);



        StickyDecoration decoration = StickyDecoration.Builder
                .init(new GroupListener() {
                    @Override
                    public String getGroupName(int position) {
                        //组名回调
                        if (dataList.size() > position) {
                            //获取城市对应的省份
                            return dataList.get(position).getProvince();
                        }
                        return null;
                    }
                })
                .setGroupBackground(Color.parseColor("#48BDFF"))    //背景色
                .setDivideColor(Color.parseColor("#CCCCCC"))        //分割线颜色
                .setGroupTextColor(Color.WHITE)                  // 边距   靠左时为左边距  靠右时为右边距
                .isAlignLeft(false)                                 //靠右显示  (默认靠左)
                .build();
        recy.addItemDecoration(decoration);
        MyAdapter adapter=new MyAdapter(MainActivity.this,dataList);
        recy.setAdapter(adapter);
        
    }
    
}

第六步 适配器

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private Context context;
    private List<City> dataList;

    public MyAdapter(Context context, List<City> dataList) {
        this.context = context;
        this.dataList = dataList;
    }

    @NonNull
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=View.inflate(context,R.layout.mytem,null);
        ViewHolder holder=new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull MyAdapter.ViewHolder viewHolder, int i) {
        viewHolder.tv.setText(dataList.get(i).getName());

    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }


    class ViewHolder extends RecyclerView.ViewHolder{

        private final TextView tv;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            tv = itemView.findViewById(R.id.tv);
        }
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值