Как добавить разделители или разделители с текстом в представление recyclerview, которое динамически адаптируется к атриAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как добавить разделители или разделители с текстом в представление recyclerview, которое динамически адаптируется к атри

Сообщение Anonymous »

У меня есть 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»