728x90
반응형
메인 XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".Main_page">
<android.support.v4.view.ViewPager
android:id="@+id/friend_List_VP"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
프래그 먼트 생성
1. Friend_ListPage.kt
2. OneToOne_Chatting.kt
3. OneToGroup_Chatting.kt
4. Setting_Page.kt
뷰페이저들을 연결해줄 메인 어댑터를 생성
Main_Pager_Adapter.kt
import android.support.v4.app.Fragment
import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentPagerAdapter
class Main_Pager_Adapter : FragmentPagerAdapter{
// 객체 생성
var data1 : Fragment = Friend_ListPage()
var data2 : Fragment = OneToOne_Chatting()
var data3 : Fragment = OnwToGroup_Chatting()
var data4 : Fragment = Setting_Page()
// 초기화
var mData : ArrayList<Fragment> = arrayListOf(data1,data2,data3,data4)
constructor(fm : FragmentManager) : super(fm){
}
override fun getItem(position: Int): Fragment {
return mData.get(position)
}
override fun getCount(): Int {
return mData.size
}
}
메인.kt에서 뷰페이저를 어댑터에 연결
// 뷰페이저 연결 ( Main_Pager_Adapter 와 연결 )
var main_adapter = Main_Pager_Adapter(supportFragmentManager)
friend_List_VP.adapter = main_adapter
---------------------------------------------------------------------------------------------------------------------------------------------------------
탭레이아웃
그래이들에 추가
// 탭레이아웃
implementation 'com.android.support:design:27.1.1'
메인 .kt
// 탭레이아웃 연결
main_TabLayout.setupWithViewPager(friend_List_VP)
아이콘 설정
main_TabLayout.getTabAt(0)?.setIcon(R.drawable.friends)
main_TabLayout.getTabAt(1)?.setIcon(R.drawable.chatting)
main_TabLayout.getTabAt(2)?.setIcon(R.drawable.group)
main_TabLayout.getTabAt(3)?.setIcon(R.drawable.setting)
선택 리스너
main_TabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabSelected(tab: TabLayout.Tab?) {
}
})
페이지가 3개 이상일때 나타나는 이슈
offscreenPageLimit
이라는 값이 디폴트로 1로 설정되어있다.
이것은 보고 있는 페이지 기준으로 양 옆으로 페이지를 하나씩 더 만든다는 의미이다.
A B C D 라는 4개의 페이지가 있을때.
offscreenPageLimit
1 인경우 A 를 만들면서 B까지 만들게 된다 B를 보고있는 경우 A 와 C 까지 만들게 된다.
그러다보니 문제는 D 를 불러올떄는 A 페이지는 제거 되어,
흔한 문제로는 데이터를 두번 불러오는 문제가 발생하게 된다.
해결 방법으로는 여러가지 있지만
가장 간편한 방법으로는 offscreenPageLimit 의 수를 늘려준다.
friend_List_VP.adapter = main_adapter
friend_List_VP.offscreenPageLimit = 3
728x90
반응형
'Kotlin' 카테고리의 다른 글
(스크랩) 안드로이드 뷰페이저, 프레그먼트 페이지 관련 이슈 (0) | 2018.11.07 |
---|---|
코틀린 리싸이클러뷰 recyclerView 사용하기 (0) | 2018.11.02 |
코틀린 문자열 구분자를 가지고 나누어 리스트에 담기 (0) | 2018.10.26 |
코틀린 엑티비티를 다이얼로그로 띄우기 (0) | 2018.10.24 |
코틀린 AsyncTask를 이용한 okHttp 통신 (0) | 2018.10.12 |