2017-01-05 3 views
1

У меня есть элемент RecyclerView на Java, который содержит несколько изображений, которые будут отображаться на основе некоторых условий. Тем не менее, я заметил, что если выполняется большинство условий, многие изображения будут видны и будут не связаны с родительским макетом.Сделайте 3 вида видимыми, затем спрячьте остальные на основании условия

Ниже показано, как мои намерения для этой цели: What's happening VS Expectation

Рабочий код прост для каждого изображения в RecyclerView, например:

if (iJobType == 1) { 
imageView1.setVisibility(View.VISIBLE) 
} else { 
imageView1.setVisibility(View.GONE) 
}  

if (iJobType == 2) { 
imageView2.setVisibility(View.VISIBLE) 
} else { 
imageView2.setVisibility(View.GONE) 
} 

Однако, я не уверен, что делать только 3 изображения после выполнения 3 условий. Скажем, iJobType - 1, 2, 3, 4, 5, 6; это означает, что на этом условии отобразятся 6 изображений, но сейчас мне нужно только 3 изображения для отображения.

Я надеюсь, что это достаточно ясно, не стесняйтесь оставлять комментарии ниже, чтобы понять это лучше. Ура!

+1

u необходимо проверить ширину вашего изображения и ширину экрана. например .. с каждой настройкой .setVisibility (видимый), увеличивать переменную занятого пространства и проверять с общей доступностью. что-то вроде этого – Farhan

+0

@Farhan Это на самом деле имеет большой смысл! Спасибо за предложение! –

+0

Возможно, видимость - не самый лучший вариант. Вы должны попытаться увеличить ваш getItemCount() в соответствии с доступным пространством. Таким образом, адаптер будет вызывать только bindViewHolder (держатель VH, позиция int), когда есть место –

ответ

0

Что я хотел бы сделать в этом случае:

Во-первых, я создам геттер сеттер булево isConditionmeet в классе Object, который используется в классе адаптера.

например. Список используется в классе адаптера, как:

private ArrayList<MyObject> list; 

и класс объектов:

public class MyObject 
{ 
    private boolean conditionMeet; 

    public boolean isconditionMeet() 
    { 
    return conditionMeet; 
    } 

    public void setconditionMeet(boolean conditionMeet) 
    { 
    this.conditionMeet = conditionMeet; 
    } 
} 

Теперь, когда состояние будет соответствовать, чтобы показать деталь, я установлю setconditionMeet (истину) для этого элемента и conditionMeet является ложным для других предметов. Наконец, обновите адаптер, чтобы получить изменения в пользовательском интерфейсе.

Смежные вопросы