반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
지난 포스팅에서 필요한 xml과 리소스를 모두 구성해봤는데요.
이번에는 아래처럼 메인화면을 구성해보겠습니다.
지난 포스팅에서 기본 구성은 끝이 났죠?
이번 포스팅에서는 2개의 .kt 파일을 생성하고
MainActivity의 코드를작성합니다.
#1. FragmentHomeAdapter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | class FragmentHomeAdapter(private val context: Context, private val videos: Videos) : RecyclerView.Adapter<FragmentHomeAdapter.HomeViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeViewHolder { val inflater = LayoutInflater.from(parent.context) val itemView = inflater.inflate(viewType, parent, false) return when(viewType) { R.layout.item_toolbar -> HomeViewHolder.HomeToolbarViewHolder(itemView) R.layout.item_video -> HomeViewHolder.HomeContentsViewHolder(itemView) else -> throw IllegalStateException("Unknown viewType $viewType") } } override fun onBindViewHolder(holder: HomeViewHolder, position: Int) { when(holder) { is HomeViewHolder.HomeToolbarViewHolder -> { } is HomeViewHolder.HomeContentsViewHolder -> { holder.uploaderImg.apply { background = ShapeDrawable(OvalShape()) clipToOutline = true } Glide.with(context).load(videos.thumbnail[position - 1]).into(holder.thumbnail) Glide.with(context).load(videos.thumbnail[position - 1]).into(holder.uploaderImg) holder.description.text = videos.videoNames[position - 1] holder.uploader.text = videos.videoUploader[position - 1] } } } override fun getItemViewType(position: Int): Int { return when(position) { 0 -> R.layout.item_toolbar else -> R.layout.item_video } } override fun getItemCount() = Videos.video.size + 1 sealed class HomeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { class HomeToolbarViewHolder(itemView: View) : HomeViewHolder(itemView) { } class HomeContentsViewHolder(itemView: View) : HomeViewHolder(itemView) { val thumbnail = itemView.findViewById(R.id.videoThumbnailImageView) as AppCompatImageView val description = itemView.findViewById(R.id.videoDescriptionTxtView) as AppCompatTextView val uploader = itemView.findViewById(R.id.videoUploaderTxtView) as AppCompatTextView val uploaderImg = itemView.findViewById(R.id.uploaderImgView) as AppCompatImageView } } } | cs |
#2. FragmentHome
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class FragmentHome: Fragment() { companion object { private val TAG = FragmentHome::class.java.simpleName } override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.fragment_home, container, false) val homeRecyclerView = view.findViewById<RecyclerView>(R.id.homeRecyclerView) homeRecyclerView.apply { layoutManager = LinearLayoutManager(context) isNestedScrollingEnabled = false adapter = FragmentHomeAdapter(context, Videos) } return view } } | cs |
#3. MainActivity 코드작성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class MainActivity : AppCompatActivity() { private val fragmentHome = FragmentHome() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) bottom_nav.setOnNavigationItemSelectedListener(MenuItemSelectedListener()) bottom_nav.selectedItemId = R.id.navigation_home } // BottomNavigationView TouchEvent inner class MenuItemSelectedListener: BottomNavigationView.OnNavigationItemSelectedListener { override fun onNavigationItemSelected(item: MenuItem): Boolean { val transaction = supportFragmentManager.beginTransaction() when (item.itemId) { R.id.navigation_home -> { transaction.replace(R.id.page_container, fragmentHome) .commitAllowingStateLoss() } } return true } } } | cs |
이상입니다.
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 MotionLayout 사용 시 AAPT: error: attribute target (aka thomas.park.altube:target) not found. (0) | 2020.03.19 |
---|---|
안드로이드 유튜브 스타일 모션레이아웃(3) - 모션레이아웃 적용하기[1] (0) | 2020.03.18 |
안드로이드 유튜브 스타일 모션레이아웃(1) - 프로젝트 생성 및 의존성추가, 기본 화면 구성하기 (0) | 2020.03.18 |
안드로이드 유튜브 스타일 레이아웃 만들기(2) - 실행 예제 (0) | 2020.03.17 |
안드로이드 View의 스크린 상의 절대좌표 구하기 getLocationOnScreen() (0) | 2020.03.17 |