상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
영어회화에서 금융 관리에 대해 조언을 줄 때 유용한 표현은?
인공지능과 도시 개발: 8가지 혁신적인 아이디어
근육을 키우기 위해 피해야 할 5가지 음식
근육 회복을 위한 필수 영양소 5가지
뇌염 예방접종: 일반인이 알아야 할 8가지 사실
챗GPT와의 대화로 학습 효과를 높이는 5가지 사실
챗GPT로 개인 맞춤형 학습 경험 만들기 5가지 전략
스스로를 사랑하는 법, 근력운동의 5가지 이유!
CHATGPT와 인간의 상호작용은 어떻게 다릅니까?
CHATGPT의 사용 수명은 얼마나 되나요?
라떼가 대중화된 배경은 무엇인가요?
라떼의 맛을 조절하는 방법에는 어떤 것이 있나요?
Previous
Next
수정하기 - ViewPager에서 비동기 데이터 로딩은 어떻게 처리하나요?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
ViewPager에서 비동기 데이터 로딩을 처리하는 방법은 여러 가지가 있습니다. ViewPager는 여러 페이지를 양방향으로 스크롤하는 데 유용한 UI 컴포넌트입니다. 비동기 데이터를 로드할 때는 주로 `AsyncTask`, `Loader`, 또는 `ViewModel`과 `LiveData`를 사용하는 방법이 있습니다. 다음은 이러한 방법에 대한 간략한 설명입니다. 1. AsyncTask 사용하기 `AsyncTask`를 사용하여 백그라운드 스레드에서 데이터를 로드하고, UI 스레드에서 결과를 업데이트할 수 있습니다. 다만, `AsyncTask`는 API 30에서 deprecated 되었으므로, 최신 Android 개발에서는 권장되지 않습니다. ```java public class MyPagerAdapter extends PagerAdapter { private Context context; private List<MyData> dataList; public MyPagerAdapter(Context context) { this.context = context; this.dataList = new ArrayList<>(); loadData(); } private void loadData() { new LoadDataTask().execute(); } private class LoadDataTask extends AsyncTask<Void, Void, List<MyData>> { @Override protected List<MyData> doInBackground(Void... voids) { // 데이터 로딩 로직 return fetchData(); } @Override protected void onPostExecute(List<MyData> data) { dataList.clear(); dataList.addAll(data); notifyDataSetChanged(); } } @Override public Object instantiateItem(ViewGroup container, int position) { // 페이지 생성 로직 } @Override public int getCount() { return dataList.size(); } } ``` 2. Loader 사용하기 `Loader`는 비동기 데이터 로딩을 관리하는 Android의 컴포넌트입니다. Activity나 Fragment에서 `LoaderManager`를 사용하여 `Loader`를 띄울 수 있습니다. ```java public class MyFragment extends Fragment implements LoaderManager.LoaderCallbacks<List<MyData>> { private static final int LOADER_ID = 1; private MyPagerAdapter adapter; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getLoaderManager().initLoader(LOADER_ID, null, this); } @Override public Loader<List<MyData>> onCreateLoader(int id, Bundle args) { return new My<a href='https://sangseek.com/sangseeks/DataLoader/ko'>DataLoader</a>(getContext()); } @Override public void onLoadFinished(Loader<List<MyData>> loader, List<MyData> data) { adapter.updateData(data); } @Override public void onLoaderReset(Loader<List<MyData>> loader) { adapter.updateData(new ArrayList<>()); } } ``` 3. ViewModel과 LiveData 사용하기 `ViewModel`과 `LiveData`는 최신 Android 앱 개발에서 권장되는 아키텍처 컴포넌트로, 생명주기에 안전하고 비동기 데이터 로딩을 보다 효과적으로 처리하는 데 도움을 줍니다. ```java public class MyViewModel extends ViewModel { private MutableLiveData<List<MyData>> liveData = new MutableLiveData<>(); public LiveData<List<MyData>> getData() { return liveData; } public void loadData() { // 비동기 로딩 로직 작성 new Thread(() -> { List<MyData> data = fetchData(); liveData.postValue(data); }).start(); } } // Fragment에서 LiveData 옵저빙 MyViewModel viewModel = new ViewModelProvider(this).get(MyViewModel.class); viewModel.getData().observe(getViewLifecycleOwner(), data -> { adapter.updateData(data); }); ``` 결론 위와 같이 ViewPager에서 비동기 데이터를 로드하는 방법에는 다양한 방식이 있습니다. `AsyncTask`는 더 이상 권장되지 않으며, `Loader`와 `ViewModel/LiveData`가 더 나은 선택입니다. `ViewModel`과 `LiveData`를 사용하면 데이터의 생명주기를 관리하기가 용이하며, UI 회전 등으로 인한 데이터 손실을 방지할 수 있습니다.
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기