У меня есть RecylerView, отображающий список данных. Мне нужно добавить разделители или разделители, а также два разделителя или разделителя, чтобы я мог добавить текст [Присутствует и Приглашенный], заголовок должен динамически адаптироваться к статусу элемента, присутствующего в списке. Когда человек присоединяется к группе, он должен перейти от приглашения к представлению.
Примечание: размер приглашений может увеличиваться или уменьшаться, а также быть представлен в зависимости от статуса элемента.
Я добился следующего, но выравнивание не подходит для динамических изменений. Для ясности обратитесь к скриншоту:
https://i.sstatic.net/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 : Alignment 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 */
}
Подробнее здесь: https://stackoverflow.com/questions/772 ... cally-adap