일모도원(日暮途遠) 개발자
[안드로이드UI] 어댑터에서 모든 아이템이 binding되는게 레이아웃 이슈라니... 본문
리스트가 600개 정도 되는데 이게 전부 다 어댑터에서 binding이 되고 있어서 무척 느리다. 삽질 끝에 소스코드가 아닌, 레이아웃쪽에 문제가 있다는걸 알았다.
원인은 아래 코드가 문제였다.
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/innerLayout"
app:layout_constraintBottom_toTopOf="@+id/nvBottom">
저 코드로 인해서 리사이클 뷰의 높이가 제대로 안구해져서 어댑터에서 높이에 해당되는 아이템만 바인딩하는게 아니라 리스트내의 모든 아이템을 바인딩 해서 오류가 발생했다. (왜 저코드가 문제인지는 정확히는 잘 모르겠다...)
안되는거
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.dalread.component.Toolbar
android:id="@+id/header" />
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/innerLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/header"
app:layout_constraintBottom_toTopOf="@+id/nvBottom">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="10"
tools:listitem="@layout/item_voca_4buttons" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nvBottom"
style="@style/WidthMatch"
android:layout_alignParentBottom="true"
app:menu="@menu/menu_bottom_word_list"
app:layout_constraintTop_toBottomOf="@+id/innerLayout"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
아래처럼 고치면 바인딩이 이슈는 해결되지만 UI문제가 생긴다.
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/innerLayout"
app:layout_constraintBottom_toBottomOf="parent">
즉 이런씩으로 BottomNavigationView가 일부 잘려져 나온다.
내경우에는 ConstraintLayout 안에 다시 ConstraintLayout으로 레이아웃을 만들지 않아도 되어서 안에서는 그냥 LinearLayout으로 해결했다.
아래코드는 그냥 참고만 하자.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/llRoot"
style="@style/ViewBase"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/llMain"
android:layout_width="match_parent"
android:layout_height="0dp"
android:orientation="vertical"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent">
<com.dalread.component.Toolbar
android:id="@+id/header"
style="@style/WidthMatch"
app:leftIcon="@drawable/ic_back"
app:rightText="@string/menu"
app:title="@string/tb_word_list"/>
<me.zhanghai.android.fastscroll.FastScrollScrollView
android:id="@+id/fssvPreview"
android:background="@color/backgroundColor"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvInfo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:itemCount="2"
tools:listitem="@layout/item_voca_4buttons" />
</me.zhanghai.android.fastscroll.FastScrollScrollView>
</LinearLayout>
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/nvBottom"
style="@style/WidthMatch"
android:layout_alignParentBottom="true"
app:itemBackground="@color/backgroundColor"
app:itemIconTint="@drawable/selector_voca"
app:itemTextColor="@drawable/selector_voca"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:menu="@menu/menu_bottom_word_list" />
</androidx.constraintlayout.widget.ConstraintLayout>
'안드로이드 개발 > UI관련' 카테고리의 다른 글
[안드로이드UI] Material Dialogue 사용시 둥근 테두리 주기 (0) | 2023.04.30 |
---|---|
[안드로이드UI] 다이얼로그 넓이 조정하기 (0) | 2023.04.27 |
[안드로이드UI] 채팅의 메시지창 좌우 여백 다르게 주기 (0) | 2023.03.28 |
[Android UI] 뷰의 레이아웃이 안보일때. (0) | 2022.12.26 |
[Android UI] SVG파일의 내용이 보이지 않을때. (0) | 2022.10.01 |