如何将带有文本的分隔符或间隔符添加到动态适应状态属性的recyclerview

问题描述 投票:0回答:1

我有一个显示数据列表的 RecylerView。我需要添加分隔符或间隔符,我还需要添加两个分隔符或间隔符,以便我可以添加文本[当前和邀请]标题应动态适应列表中存在的项目的状态。当此人加入聚会时,他们应该从邀请变为出席

** 注意:邀请的大小可以增加或减少,也可以根据项目的状态呈现 **

我已经实现了以下目标,但对齐方式不适合动态变化

为了清晰起见,请参考图片: https://i.stack.imgur.com/mssFl.gif

SeparationDecorator 类:

public class SeparationDecorator extends RecyclerView.ItemDecoration {
    private int textSize = 50;
    private int groupSpacing = 100;

    private static int printPresentAt;
    private static int printInviteAt;

    private Paint paint = new Paint();
    {
        paint.setTextSize(textSize);
    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {

        // TODO : Allignment Problem

        for (int i = 0; i < parent.getChildCount(); i++) {

            View view = parent.getChildAt(i);
            int position = parent.getChildAdapterPosition(view);

            int present = MyGlobal.getPresentCount();
            int invited = MyGlobal.getInviteCount();

            if(present == 0 && invited>0){
                SeparationDecorator.printPresentAt = invited;
                SeparationDecorator.printInviteAt = 0;
            } else if (present > 0 && invited>0) {
                SeparationDecorator. printPresentAt = 0;
                SeparationDecorator.printInviteAt = present;
            } else if (present > 0 && invited == 0) {
                SeparationDecorator.printPresentAt = 0;
                SeparationDecorator.printInviteAt = present;
            }

            if (position == SeparationDecorator.printPresentAt) {
                c.drawText("Present", view.getLeft(),
                        view.getTop() - groupSpacing + textSize, paint);
            } else {
                if(position == SeparationDecorator.printInviteAt) {
                    c.drawText("Invited", view.getLeft(),
                            view.getTop() - groupSpacing + textSize, paint);
                }
            }


        }
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        if (parent.getChildAdapterPosition(view) == SeparationDecorator.printInviteAt
                ||parent.getChildAdapterPosition(view) == SeparationDecorator.printPresentAt) {
            outRect.set(0, groupSpacing, 0, 0);
        }
    }
}

MyGlobal.getPresentCount() 是当前成员的数量 MyGlobal.getInviteCount() 是受邀成员的数量 ** 它们会动态变化 **

物品类别:

public class FriendsModel {

    String userName;
    String handleName;
    int status;
    /*
    *   0 - Invited
    *   1 - Accepted
    *
    * */
    String fcm;

    String uid;

    public FriendsModel(String userName, String handleName, int status, String fcm, String uid) {
        this.userName = userName;
        this.handleName = handleName;
        this.status = status;
        this.fcm = fcm;
        this.uid = uid;
    }

    public FriendsModel() {
    }

    @Override
    public boolean equals(Object obj) {

        FriendsModel model = (FriendsModel) obj;

        if(this.uid.equals(model.uid))
            return true;

        return false;
    }

    /* All getters and setters */

}
java android android-recyclerview
1个回答
0
投票

需要重新连接适配器

recycleView.adapter = null
recycleView.adapter = adapter
© www.soinside.com 2019 - 2024. All rights reserved.