Вы не можете сделать это только в XML. Вам понадобится немного Java. Вы были на правильном пути с весами макета.
Скелет XML:
<LinearLayout
android:orientation="vertical">
<RecyclerView
android:id="@+id/recView1"
android:layout_height="0dp"
android:layout_weight="1"
/>
<RecyclerView
android:id="@+id/recView2"
android:layout_height="0dp"
android:layout_weight="1"
/>
</LinearLayout>
Следующая часть должна быть сделана на Java.
Добавьте наблюдатель данных в оба адаптера и обязательно переопределите все методы, чтобы они вызывали onChanged()
. Затем внутри onChanged()
получите счетчик текущего адаптера и установите видимость RecyclerView соответствующим образом.
Вот пример для первого:
recView1.getAdapter().registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged() {
recView1.setVisibility(recView1.getAdapter().getItemCount() > 0 ? View.VISIBLE : View.GONE);
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeChanged(int positionStart, int itemCount, Object payload) {
onChanged();
}
@Override
public void onItemRangeInserted(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeRemoved(int positionStart, int itemCount) {
onChanged();
}
@Override
public void onItemRangeMoved(int fromPosition, int toPosition, int itemCount) {
onChanged();
}
}
На практике вам, вероятно, следует извлекать обоих наблюдателей в переменные, чтобы вы могли отменить их регистрацию, когда содержащее действие / окно / все, что уничтожено.