[삽질의 기록]
Android로 개발하다보면, TabLayout을 사용하여 UI를 구현해야하는 경우가 발생한다.
약 1년 전 개발한 프로젝트에서 Fragment 안에 TabLayout과 TabViewPager를 배치하여 구현해야하는 일이 생겼다.
이 때 TabViewPager에서 임의의 탭을 클릭했을 때, 지정한 Fragment가 나타나는데, 이를 TabViewPagerAdapter.java 파일의 getItem(int position) 이라는 함수를 override하여 이를 구현할 수 있다.
[TabViewPagerAdapter.java]
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
recentFragment = new SendTabRecentFragment();
return recentFragment;
case 1:
// photo
case 2:
// video
case 3:
// file
default:
return null;
}
}
각 case마다 Fragment를 생성하고 생성한 fragment를 리턴하는 코드이다.
이 때 나의 경우, 위 코드처럼 처음에 등장하는 페이지를 0번 탭에서 나오는 페이지로 설정하고, 단순히 테스트를 위해서 "case 0:"에 대해서 생성한 fragment를 리턴하고 그 외의 1,2,3번 case에 대해선 따로 리턴을 하지 않았다.
약 1년 전에 발생한 에러라 정확히는 기억이 나지 않으나, 해당 앱이 제대로 실행되지 않고 종료되는 현상이 발생하였다.
구글링을 통해 이런 저런 방법을 동원하였으나 성공하지 못했었다.
결론적으로 해결은 했으나, 이 때 대단한 삽질을 했다.
나의 경우 tabLayout의 각 탭을 java에 동적으로 구현하지 않고, xml에 직접 코드를 작성하였다.
따라서 탭의 개수는 정해져있었고, 이 프로젝트에선 탭의 개수가 4개였다.
임의의 탭을 누를 때 각 탭을 누를 때마다 해당 fragment가 나타나도록 getItem에 각 fragment를 지정해주어야하는데, 이 때 아래 코드 처럼 각 case마다 fragment를 미리 작성을 해야하는 것이었다.
이런 식으로 각 frament 별로 (내용이 비어있어도 좋으니) .java 파일을 생성하고 getItem에 각각 지정해줌으로써 실행이 제대로 되지 않고 종료되는 현상을 해결할 수 있었다.
[TabViewPagerAdapter.java]
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
recentFragment = new SendTabRecentFragment();
return recentFragment;
case 1:
photoFragment = new SendTabPhotoFragment();
return photoFragment;
case 2:
videoFragment = new SendTabVideoFragment();
return videoFragment;
case 3:
fileFragment = new SendTabFileFragment();
return fileFragment;
default:
return null;
}
}
[SendTabRecentFragment.java]
public class SendTabRecentFragment extends Fragment {
private RecyclerView recentRecyclerview;
private RecyclerView.LayoutManager layoutManager;
}
[SendTabPhotoFragment.java]
public class SendTabPhotoFragment extends Fragment {
}
[SendTabVideoFragment.java]
public class SendTabVideoFragment extends Fragment {
}
[SendTabFileFragment.java]
public class SendTabFileFragment extends Fragment {
}
'안드로이드' 카테고리의 다른 글
[Android] Java ArrayList<DataModel> Sorting (0) | 2020.10.15 |
---|---|
[Android] Java Convert Date (0) | 2020.10.15 |
[Android] TabLayout textsize & Icon 색상 & Indicator 변경 방법 (0) | 2020.09.15 |
[Android] 내장 메모리 파일 가져오기 (2) (0) | 2020.08.10 |
[Android] 내장 메모리 파일 가져오기 (1) (0) | 2020.05.03 |