-
[Android]ViewPager 내부 Fragment와 ListView, Item 갱신하기Development/Android 2016. 6. 10. 19:32반응형
Test environment
Android ver.
6.0.1
Device
SAMSUNG GALAXY NOTE 4S-LTE(SM-N916L)
Develop ver.
Android Studio 2.0
Test Date
2016. 6. 10.
위 그림과 같이 A,B,C 프래그먼트가 있고, 각 프래그먼트는 리스트뷰를 가지고 있습니다.
위 십자가버튼(+)을 누르고 옵션값을 저장하면 db로 저장되고, 각 Fragment는 db에 있는 옵션값을 불러와 리스트뷰를 생성합니다.
이 과정에서 Fragment 내부의 리스트뷰를 갱신하려고 하는데 리스트뷰와 ViewPager 모두 notifyDataSetChanged를 해보았지만
즉각 갱신이 안됩니다. 탭 A를 갱신하려면 탭C까지 갔다가 다시 A로 와야 갱신이 됩니다.
이를 해결하기 위해 이틀을 개고생했네요 ㅠㅠ
구글링 해본 결과 상당수가 말하고 있는 것이
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}이것이더군요 ㅎㅎ.. 사실 사용하는 법을 몰라 방치해뒀습니다..
(알고보니 이건 꼭 있어야되더라구요!)
http://thedeveloperworldisyours.com/android/update-fragment-viewpager/#sthash.I4uJ3c5A.fgTMmuGp.dpbs
위 사이트에 있는대로 해봤지만 그래도 되지 않음.. (refresh()함수 구현에서 막혔음)
아무리 생각해봐도 ViewPager 자체가 갱신이 안되는 것 같다고 생각했고,
결국은 이러한 ViewPager를 호출하는 곳은 바로 MainActivity라는 점을 깨닫고
MainActivity.Java에서 다음과 같이 구현하면 된다는 것을 깨달았어요 ㅠㅠ
이리 쉬운걸 구글링에서 'ViewPager갱신' 검색을 수십번하면서 헛탕질만 했네요 ㅎㅎ
번외로 프래그먼트 내 리스트뷰에서 다이얼로그를 생성하고 닫기 버튼을 눌렀을 때 화면이 갱신되게 하려면?!
다시 MainActivity를 호출해주면 됩니다. ㅎㅎ 이렇게요
Intent in = new Intent(getContext(), MainActivity.class);
startActivity(in);저처럼 개고생 하시는분이 없으시길 바라며.. 마무리하겠습니다!
--------------------------추가---------------------------
최고로 간단한 방법
메인엑티비티에 있는 viewPagerAdapter.notifyDataSetChanged();를 호출하면 됩니다.
메인 엑티비티에 아래와같이 함수를 만듭니다.
public void refresh()
{
vpAdapter.notifyDataSetChanged();
}그리고 프래그먼트에서 refresh()를 호출하면됩니다.
((MainActivity)getActivity()).refresh();
끝!
위 ViewPager로 만든 앱은 아래 링크에서 확인하세요^^
개발된 앱 정보 보기 : http://citynetc.tistory.com/146
앱 다운로드 : https://play.google.com/store/apps/details?id=com.handykim.nbit.everytimerfree
< The way of fragment refresh in Android ViewPager. >
Do not write source in fragment.java.
Do write viewAdapter.notifyDataSetChanged(); in onResume, MainActivity only.
Good Luck :)
반응형'Development > Android' 카테고리의 다른 글
[안드로이드]커스텀 다이얼로그 해상도 비율에 맞게 크기 조절하기 (0) 2017.09.29 [Android]안드로이드 - 앱을 설치할 수 없음 505에러 뜨는 원인 (0) 2016.12.24 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 라인) (0) 2016.12.23 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 인스타그램 링크) (9) 2016.12.23 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 트위터 링크) (1) 2016.12.22 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 페이스북 링크) (6) 2016.12.21 [Android]안드로이드 앱에 SNS공유 기능 넣기(with 카카오링크) (2) 2016.12.20 [Android]SQLite db에 이미지(비트맵,Drawable) 저장(읽기,쓰기) 하는 법 (3) 2016.11.03 [Android]안드로이드 버전에 따른 AlarmManager 사용법 (6) 2016.09.29 [Android]디바이스 화면 켜기 (0) 2016.09.29